我遇到了使用shell Ghostscript命令进行字符串重定向和python的问题。
NP执行此操作:
subprocess.call(["gs", "-q","-dBATCH", "-dNOPAUSE","-sDEVICE=bbox", "input.pdf"])
但是我在添加2>& 1:
时收到错误subprocess.call(["gs", "-q","-dBATCH", "-dNOPAUSE","-sDEVICE=bbox", "input.pdf","2>&1"])
或者:
subprocess.call(["gs", "-q","-dBATCH", "-dNOPAUSE","-sDEVICE=bbox", "input.pdf","2>&1",">/dev/null"])
我想使用2>& 1来应用'grep'。
错误示例:
错误:/(2>& 1)操作数堆栈中的/ undefinedfilename:
执行堆栈:%interp_exit .runexec2 --nostringval--
--nostringval---nostringval-- 2%stopped_push --nostringval---nostringval---nostringval-- false 1%stopped_push字典堆栈: - dict:1156/1684(ro)(G) -
--dict:1/20(G) - --dict:77/200(L) - 当前分配模式是本地上一个操作系统错误:2 GPL Ghostscript 9.05:不可恢复的错误,退出代码 1 1
仍未解决如何执行如下命令:
subprocess.call("gs -q -dBATCH -dNOPAUSE -sDEVICE=bbox input.pdf 2>&1
| egrep -v HiResBoundingBox | egrep -o "[0-9]{1,}",shell=True)
答案 0 :(得分:2)
这是因为您将参数作为列表传递。当您将参数作为iterable传递时,每个部分都会传递给生成的进程(在这种情况下,gs
抱怨它不知道如何处理2>&1
...)你'如果你打字,可能会得到相同的信息:
gs -q -dBATCH -dNOPAUSE -sDEVICE=bbox input.pdf '2>&1'
在一个shell中。
subprocess.call("gs -q -dBATCH -dNOPAUSE -sDEVICE=bbox input.pdf 2>&1",shell=True)
会做你想要的 - 或者'更好'......
import sys
subprocess.call(["gs", "-q", "-dBATCH", "-dNOPAUSE", "-sDEVICE=bbox", "input.pdf"],stderr=sys.stdout)
(更好,因为它避免了shell=True
)