Pythonコードを文字列として渡すという煩わしさから、Rolandのソリューションを実装するのに少し時間がかかったので、私は実際の例を分かち合うと思いました。
このスクリプトは、作業ディレクトリに外部プログラムを置き、標準出力と標準エラーをファイルにリダイレクトします。
from timeit import timeit
reps = 500
stdout = open("add_numbers_outputs.log", 'w')
stderr = open("add_numbers_errors.log", 'w')
external_command = "./add_numbers"
parameter = str(1000000) # one million
call_arguments = """[
'%s',
'%s'], # pass additional parameters by adding elements to this list
stdout=stdout,
stderr=stderr
""" % (external_command, parameter)
print "Timing external command "+external_command+" with parameter "+parameter
time_taken = timeit(stmt = "subprocess.call(%s)" % call_arguments,
setup = """import subprocess;
stdout = open("add_numbers_outputs.log", 'w');
stderr = open("add_numbers_errors.log", 'w')
""",
number = reps)/reps
print "Average time taken for %s repetitions: %f seconds" % (reps, time_taken)
ありがとうございました!それはかなり有益です! :) – Frost
この答えは、タイミングのPythonコードでは問題ないようですが、Popen.wait()がビジーループを使用しているため、サブプロセスを実行している場合、正確ではない可能性があります。 [https://docs.python.org/dev/library/subprocess.html#subprocess.Popen.wait] – ggg
@gggこれが本当に問題なのかどうかは不明です。Popen.wait()は現在のプロセスで実行する必要があります。したがって、子プロセスのリソース使用は影響を受けてはなりません。 – Steohan