从字符串执行命令并对其进行计时

时间:2015-12-22 09:26:47

标签: python linux bash csv timing

我需要编写一个脚本,它将接收几个参数,其中最重要的一个参数 是一个包含命令的字符串(在linux中)。

我需要能够运行它,将输出保持在STDOUT(通常),但也要计时,然后输出一些.csv文件。

说它看起来像这样:

timing_script.py param "echo hello world; cat /tmp/foo_bar"

该命令每隔几毫秒就会向STDOUT输出一些东西,我需要它留在那里。我之所以这样说是因为我之前尝试过这个脚本是在bash,我必须从cut命令time实际计算时间,这也意味着不得不忽视输出命令。

我还必须将类似param,0.345的内容添加到csv文件中。

如何从字符串执行命令并计时?

2 个答案:

答案 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"

玩得开心