1

そのため、標準出力に数行を出力する別の python スクリプトを呼び出す必要がある python スクリプトを作成しています。呼び出し先スクリプトの出力をリストに保存し、メイン スクリプトで処理したいと考えています。

簡単な方法の 1 つは、結果をファイル (file3) に出力し、次のようにファイルを読み取ることです。

subprocess.call("./vecdiff.py file1 file2 > file3")

f = open("file3", "r")

出力をメイン スクリプトの一部のリストに直接リダイレクトするにはどうすればよいですか?

4

4 に答える 4

3

最も簡単な方法はsubprocess.check_output、プロセスを呼び出してその出力を返す call です (またはゼロ以外の戻りコードで例外を発生させますが、例外オブジェクトを介して出力にアクセスできます)。STDOUTと の両方を簡単に処理できます (ただし、デフォルトSTDERRでのみ)。STDOUT

マニュアルの例:

>>> subprocess.check_output(["echo", "Hello World!"])
'Hello World!\n'

プロセスが大量のデータを生成していて、実行中に処理したい場合は、パイプを開いてcommunicate、他の回答で説明されているように使用する必要があります。

于 2013-03-29T16:24:12.627 に答える
2

以下のように、子プロセスの stdout と stderr を PIPE にリダイレクトすると、'communicate()' メソッドを使用して子プロセスの stdout と stderr を PIPE から取得できます。「PIPE」は、親プロセスと子プロセスの間のパイプです。

from subprocess import Popen, PIPE
p = Popen("./vecdiff.py file1 file2", stdout=PIPE, stderr=PIPE)
output, errput = p.communicate()
于 2013-03-29T16:22:47.613 に答える
1

を使用するsubprocess.Popen()と、出力を で保存できますcommunicate()。例えば:

proc = subprocess.Popen("./vecdiff.py file1 file2", stdout=subprocess.PIPE)
output = proc.communicate()
于 2013-03-29T16:03:03.903 に答える
0

plumbuで簡単に実行できます:

from plumbum.cmd import python
cmd = python['./vecdiff.py']['file1', 'file2']
for line in cmd().splitlines():
    print line
于 2013-03-29T16:11:33.913 に答える