從命令行發出此命令:pdftops -paper A4 -nocenter opf.pdf - | pstops "1:[email protected](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:[email protected](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:[email protected](0.5cm,13.5cm) 中,所以我嘗試使用/不使用單引號,并使用(轉義)雙引號。我什至嘗試shlex.quote了它產生了一個非常奇特''"'"'1:[email protected](0.5cm,13.5cm)'"'"''的,但仍然是同樣的錯誤。這是什么原因造成的?編輯作為最后一個資源,我嘗試了: os.system(("pdftops -paper A4 -nocenter {} - | " "pstops '1:[email protected](1cm,13.5cm)' | " "lpr").format(path))效果很好。不過,我仍然更喜歡上述Popen解決方案。
1 回答

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