2

しばらくの間、このようなものを動作させようとしてきましたが、以下は正しい arg を c プログラム arg_count に送信していないようですargc = 1。私はそれが欲しいと確信しているとき2./arg_count -argシェル出力から 2...

私は別の引数で試しました(したがって、シェルで3を出力します)が、サブプロセスを介して呼び出すと、まだ1が出力されます。

import subprocess
pipe = subprocess.Popen(["./args/Release/arg_count", "-arg"], shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
out, err = pipe.communicate()
result = out.decode()
print "Result : ",result
print "Error : ",err

どこで倒れているか分かりますか?私はLinuxを実行しています。

4

2 に答える 2

2

その場合shell=True、あなたの呼び出しは次と同等です:

from subprocess import Popen, PIPE

proc = Popen(['/bin/sh', '-c', "./args/Release/arg_count", "-arg"],
             stdout=PIPE, stderr=PIPE)

つまり、-argプログラムではなく、シェル自体に渡されます。ドロップshell=Trueしてプログラムに渡し-argます:

proc = Popen(["./args/Release/arg_count", "-arg"],
             stdout=PIPE, stderr=PIPE)

stderr別にキャプチャする必要がない場合はstdout、次を使用できますcheck_output()

from subprocess import check_output, STDOUT

output = check_output(["./args/Release/arg_count", "-arg"]) # or
output_and_errors = check_output(["./args/Release/arg_count", "-arg"],
                                 stderr=STDOUT)
于 2013-10-15T10:05:40.860 に答える