Выполнение этой команды из командной строки:
pdftops -paper A4 -nocenter opf.pdf - | pstops "1:0@0.8(0.5cm,13.5cm)" > test.ps
работает нормально. Я попытался преобразовать это в список параметров для subprocess.Popen
следующим образом:
import subprocess as sp
path = '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
(si c). Я подозреваю, что 0x23f2dd0
каким-то образом заменил 'P'. В любом случае, я подозреваю, что проблема в странице spe c 1:0@0.8 (0,5 см, 13,5 см), поэтому я попытался использовать одинарные кавычки или без них, а также двойные кавычки (экранированные). Я даже попытался shlex.quote
, который выдал очень экзотический c ''"'"'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
.