使用子进程或操作系统在 python 中打印文件会导致队列中的打印机作业停止

问题描述 投票:0回答:1

此问题适用于我正在编写的与此问题相关的代码。我现在已经能够按照我想要的方式创建 pdf 文件了。然而,当我尝试打印它时,我遇到了问题。这是相关代码(Ubuntu 22.04,python 3.10)

        with open(examfile, "wb") as fp:
            writer.write(fp)
            conn.printFile(results.printer, examfile, " ", {"Staple","1"})

            # os.system("lp -d " + results.printer + " -o Staple=1 " + examfile)
            # subprocess.run(["lp","-d",results.printer,"-o","Staple=1",examfile],capture_output=True)

results.printer 和 examfile 分别是带有打印机名称和文件名称的字符串。 当代码运行时,文件被正确创建,上面的代码将其发送到打印机,但它在打印机队列中显示为“已停止”。如果我在终端中手动运行命令,它会将文件发送到打印机并打印它。

正如你可以看到最后的评论,我尝试使用 subprocess.run,我也尝试了 os.system。在阅读了一些有关堆栈溢出的文章后,我尝试了 pycups。他们都表现出相同的行为。文件显示在打印队列中并停止。我似乎无法让他们从那里释放。我可以创建所有文件,然后从命令行将它们单独发送到打印机,但我可能会处理数百个文件,我宁愿从 python 打印它们。它还可能会增加我的存储需求,超出我的预期。我本来计划打印然后在打印后删除每个文件。

我认为这可能是我的机器上的某种设置问题,但由于 lp 命令在命令行上工作,我不知道问题是什么。

像往常一样,可能有一些简单的事情我没有考虑。如果您能让我知道它是什么,我将不胜感激。谢谢,

python linux printing subprocess os.system
1个回答
0
投票

.write
已缓冲。
fp.flush()
在期望文件包含内容之前。使用时常见的错误
tempfile.NamedTemporaryFile

© www.soinside.com 2019 - 2024. All rights reserved.