为了账号安全,请及时绑定邮箱和手机立即绑定

在 subprocess.Popen 中为“pstops”指定参数的问题

在 subprocess.Popen 中为“pstops”指定参数的问题

胡子哥哥 2022-07-05 19:24:30
从命令行发出此命令: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)


查看完整回答
反对 回复 2022-07-05
  • 1 回答
  • 0 关注
  • 105 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信