我需要编写一个脚本,它将接收几个参数,其中最重要的一个参数 是一个包含命令的字符串(在linux中)。
我需要能够运行它,将输出保持在STDOUT(通常),但也要计时,然后输出一些.csv文件。
说它看起来像这样:
timing_script.py param "echo hello world; cat /tmp/foo_bar"
该命令每隔几毫秒就会向STDOUT输出一些东西,我需要它留在那里。我之所以这样说是因为我之前尝试过这个脚本是在bash
,我必须从cut
命令time
实际计算时间,这也意味着不得不忽视输出命令。
我还必须将类似param,0.345
的内容添加到csv文件中。
如何从字符串执行命令并计时?
答案 0 :(得分:2)
您可以使用subprocess
从字符串和time
运行linux命令来计算执行时间:
import time
from subprocess import Popen, PIPE
start = time.time()
p1 = Popen(["my_linux_cmd"], stdout=PIPE)
print(p1.communicate()) # sdout
end = time.time()
exec_time = end - start
print(exec_time) # exeution time
查看subprocess.Popen了解有关可用选项的更多详细信息
警告: 要打印标准输出,您也可以使用Popen.stdout.read
但请使用communicate()
以避免死锁由于任何其他OS管道缓冲区填满并阻止子进程。
答案 1 :(得分:1)
保留在shell中的一种更简单的方法是使用-f
命令的格式化选项time
。您可以这样使用它:
$ param="foo"
$ command="echo bar ; cat /tmp/foobar"
$ /usr/bin/time -f "$param,%e" bash -c "$command"
bar
#Beginning of foobar file
#End of foobar file
foo,0.00
有关格式化man time
time
当然,您也可以直接运行以下命令(即不使用变量):
/usr/bin/time -f "myparam,%e" bash -c "echo bar ; cat /tmp/foobar"
玩得开心