0

文字列のリダイレクトとシェルの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)-現在の割り当てモードはローカルです最後のOSエラー: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 に答える