從命令行發(fā)出此命令:pdftops -paper A4 -nocenter opf.pdf - | pstops "1:0@0.8(0.5cm,13.5cm)" > test.ps工作正常。我試圖將其轉(zhuǎn)換為參數(shù)列表,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。這會在第二個(gè)中產(chǎn)生錯(cuò)誤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”。無論如何,我懷疑問題出在頁面規(guī)范 1:0@0.8(0.5cm,13.5cm) 中,所以我嘗試使用/不使用單引號,并使用(轉(zhuǎn)義)雙引號。我什至嘗試shlex.quote了它產(chǎn)生了一個(gè)非常奇特''"'"'1:0@0.8(0.5cm,13.5cm)'"'"''的,但仍然是同樣的錯(cuò)誤。這是什么原因造成的?編輯作為最后一個(gè)資源,我嘗試了: os.system(("pdftops -paper A4 -nocenter {} - | " "pstops '1:0@0.8(1cm,13.5cm)' | " "lpr").format(path))效果很好。不過,我仍然更喜歡上述Popen解決方案。
1 回答

寶慕林4294392
TA貢獻(xiàn)2021條經(jīng)驗(yàn) 獲得超8個(gè)贊
想想 shell 對那個(gè)參數(shù)做了什么(或者用類似的東西printf '%s\n'讓它告訴你)。我們需要撤消 shell 引用并將其替換為 Python 引用(這恰好非常相似):
pr = sp.Popen(
["pstops",
"1:0@0.8(0.5cm,13.5cm)"],
stdin = ps.stdout,
stdout = sp.PIPE)
添加回答
舉報(bào)
0/150
提交
取消