You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Ubuntu下用lpr打印Python临时文件报错:无法访问文件f的解决方法

解决Ubuntu下Python调用lpr打印临时文件报错的问题

错误原因

  • 你的os.system命令里的f是字符串字面量,不是变量f对应的临时文件路径,所以lpr会尝试读取名为f的文件,自然找不到。
  • tempfile.mktemp是已废弃的方法,存在安全风险(可能出现竞争条件,导致其他进程篡改文件)。

正确实现方式

方式1:修复变量替换问题(不推荐使用mktemp)

先将命令中的变量f正确代入,同时用完临时文件后手动删除:

import os
import tempfile

s = 'mystring'
f = tempfile.mktemp('.txt')
# 使用with语句确保文件正确关闭
with open(f, 'w') as fp:
    fp.write(s)

# 用f-string将临时文件路径代入命令
os.system(f"lpr -P myprinter_name {f}")
# 打印完成后删除临时文件
os.unlink(f)

方式2:使用安全的临时文件API(推荐)

用tempfile.NamedTemporaryFile替代mktemp,它是原子创建文件,避免安全问题,同时通过delete=False确保文件在关闭后仍存在(默认关闭即删除,lpr读取时需要文件存在):

import os
import tempfile

s = 'mystring'
# 创建临时文件,suffix指定后缀,delete=False表示关闭后不自动删除
with tempfile.NamedTemporaryFile(mode='w', suffix='.txt', delete=False) as fp:
    fp.write(s)
    temp_file_path = fp.name

try:
    # 代入临时文件路径到打印命令
    os.system(f"lpr -P myprinter_name {temp_file_path}")
finally:
    # 无论打印成功与否,都清理临时文件
    os.unlink(temp_file_path)

关键说明

  • 必须确保命令中的临时文件路径是变量的实际值,而不是字符串中的f字符,用f-string或str.format()都可以实现变量替换。
  • 优先使用NamedTemporaryFile,它比mktemp更安全,能避免因竞争条件导致的文件安全问题。
  • 使用with语句管理文件对象,确保文件正确关闭,避免资源泄漏。

内容的提问来源于stack exchange,提问作者nix20536

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 18:50:32