我想计算在python脚本中执行c程序所花费的时间。我为此使用了os.system()函数。
os.system("{ time ./test.out < inp;} > out 2> exe_time")
我在exe_time中得到的结果是这样的
0.00user 0.00system 0:00.00elapsed?%CPU(0avgtext + 0avgdata 1416maxresident)k 0inputs + 8outputs(0major + 65minor)pagefaults 0swaps
但是当我执行{time ./test.out< inp;}&gt; out 2&gt;终端中的exe_time我进入了exe_time文件
真实0m0.001s
用户0m0.000s
sys 0m0.000s
如何使用python获取第二版输出?
答案 0 :(得分:1)
使用bash
调用您的代码,而不是/bin/sh
(默认情况下为system()
):
subprocess.Popen(['bash', '-c', '{ time ./test.out < inp;} > out 2> exe_time'])
但请注意,上述代码无法安全地参数化以使用任意文件名。更好的实践实现可能看起来像:
o, e = subprocess.Popen(['bash', '-c', 'time "$@" 2>&1', '_', './test.out'],
stdout=subprocess.PIPE, stderr=subprocess.PIPE).communicate()
print("Output from command is:")
sys.stdout.write(o + "\n")
print("Output from time is:")
sys.stdout.write(e + "\n")
注意:
bash
,从而确保使用其time
的内置实现。2>&1
可确保test.out
编写的任何stderr与其他输出连接,而不是与time
命令的输出混合。stdout=open('out', 'w'), stderr=open('exe_time', 'w')
一样。答案 1 :(得分:1)
os.system()
使用/bin/sh
。 Bash有自己的time
内置版,而不是time
二进制文件:
$ /usr/bin/time ls /asd
ls: /asd: No such file or directory
0.00 real 0.00 user 0.00 sys
$ time ls /asd
ls: /asd: No such file or directory
real 0m0.018s
user 0m0.008s
sys 0m0.013s
如果您想查看命令执行所需的时间,请使用subprocess
:
import time
import subprocess
with open('inp', 'rb') as input_file:
with open('out', 'wb') as output_file:
start = time.time()
subprocess.call(['./test.out'], stdin=input_file, stdout=output_file)
runtime = time.time() - start