Python - 子进程模块 - Ghostscript- 2>& 1

时间:2012-05-04 15:23:34

标签: python stdout ghostscript stderr

我遇到了使用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)

1 个答案:

答案 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

的安全问题