0

我在使用 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”。

错误示例:

错误:/undefinedfilename in (2>&1) 操作数堆栈:

执行堆栈:%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)
4

1 回答 1

2

这是因为您将参数作为列表传递。当您将参数作为可迭代对象传递时,每个部分都将传递给生成的进程(在这种情况下,gs抱怨它不知道如何处理2>&1......)如果您键入以下内容,您可能会收到相同的消息:

gs -q -dBATCH -dNOPAUSE -sDEVICE=bbox input.pdf '2>&1' 

在一个壳里。

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

于 2012-05-04T15:38:39.700 回答