2

使ってます

subprocess.call(['prog', 'arg'], shell=False)

progを実行し、自分でargをエスケープするために私を惜しまないようにします。

現在、progはSTDINからの入力を必要とする場合があります。シェルでは私はただ使うことができます

echo 'some input' | prog arg

パイプを使用します。自分でargをエスケープせずに、サブプロセスでこれを行うにはどうすればよいですか?これも可能ですか?

またはこれを行う唯一の方法です

subprocess.call('echo "%s" | prog "%s"' % ('some input', 'arg'), shell=True)

これはまったく安全ではありません。

4

1 に答える 1

5
proc = subprocess.Popen(['prog', 'arg'], shell=False, stdin=subprocess.PIPE)
out, err = proc.communicate('some input')

これは基本的callに内部で行われていることですが、オブジェクトが周りにあるとそれを呼び出す機会が与えられますcommunicate。(その場合の戻りコードは にありproc.returncodeます。)

実際に stdout または stderr を取得したい場合はPIPE、それらのコンストラクターにも渡す必要があることに注意してください。上記のように、どちらもNone.

ドキュメント.


後付け: 多くの外部呼び出しを行っている場合は、 plumbumを試してみることもできます。シェルの構文に似た構文を提供するために、ハッカーをオーバーロードする一連の演算子を実行します。

于 2013-02-28T01:11:09.177 に答える