从命令行发出此命令:pdftops -paper A4 -nocenter opf.pdf - | pstops "1:0@0.8(0.5cm,13.5cm)" > test.ps工作正常。我试图将其转换为参数列表,subprocess.Popen如下所示:import subprocess as sppath = 'opf.pdf'ps = sp.Popen( ["pdftops", "-paper", "A4", "-nocenter", "{}".format(path), "-"], stdout = sp.PIPE)pr = sp.Popen( ["pstops", "'1:0@0.8(0.5cm,13.5cm)'"], stdin = ps.stdout, stdout = sp.PIPE)sp.Popen( ["lpr"], stdin = pr.stdout )文件名在哪里path- opf.pdf。这会在第二个中产生错误Popen:0x23f2dd0age specification error: pagespecs = [modulo:]spec spec = [-]pageno[@scale][L|R|U|H|V][(xoff,yoff)][,spec|+spec] modulo >= 1, 0 <= pageno < modulo(原文如此)。我怀疑0x23f2dd0不知何故取代了“P”。无论如何,我怀疑问题出在页面规范 1:0@0.8(0.5cm,13.5cm) 中,所以我尝试使用/不使用单引号,并使用(转义)双引号。我什至尝试shlex.quote了它产生了一个非常奇特''"'"'1:0@0.8(0.5cm,13.5cm)'"'"''的,但仍然是同样的错误。这是什么原因造成的?编辑作为最后一个资源,我尝试了: os.system(("pdftops -paper A4 -nocenter {} - | " "pstops '1:0@0.8(1cm,13.5cm)' | " "lpr").format(path))效果很好。不过,我仍然更喜欢上述Popen解决方案。
1 回答
宝慕林4294392
TA贡献2021条经验 获得超8个赞
想想 shell 对那个参数做了什么(或者用类似的东西printf '%s\n'让它告诉你)。我们需要撤消 shell 引用并将其替换为 Python 引用(这恰好非常相似):
pr = sp.Popen(
["pstops",
"1:0@0.8(0.5cm,13.5cm)"],
stdin = ps.stdout,
stdout = sp.PIPE)
添加回答
举报
0/150
提交
取消