Python 从字符串执行命令并计时

Python 从字符串执行命令并计时,python,linux,bash,csv,timing,Python,Linux,Bash,Csv,Timing,我需要编写一个脚本,该脚本将接收多个参数,其中最重要的参数 是包含命令的字符串(在linux中) 我需要能够运行它,保持输出在标准输出(通常),但也时间,然后输出一些.csv文件 假设它看起来像这样: timing_script.py param“echo hello world;cat/tmp/foo_bar” 该命令将每隔几毫秒将内容输出到STDOUT,我需要它保持在那里。我之所以这样说是因为我以前尝试使用这个脚本是在bash中,我必须将时间命令剪切为实际时间,这也意味着必须忽略命令的输出

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

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

假设它看起来像这样:

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

该命令将每隔几毫秒将内容输出到STDOUT,我需要它保持在那里。我之所以这样说是因为我以前尝试使用这个脚本是在
bash
中,我必须
时间
命令剪切为实际时间,这也意味着必须忽略命令的输出

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


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

您可以使用
子流程
从字符串运行linux命令,并使用
时间
计算执行时间:

导入时间
从子流程导入Popen、PIPE
开始=时间。时间()
p1=Popen([“my_linux_cmd”],stdout=PIPE)
打印(p1.communicate())#输出
end=time.time()
执行时间=结束-开始
打印(执行时间)#执行时间
查看有关可用选项的更多详细信息


警告:要打印标准输出,您也可以使用
Popen.stdout.read
但使用
communicate()
而是为了避免由于任何其他操作系统管道缓冲区填满并阻塞子进程而导致的死锁。

您可以使用
子进程
从字符串运行linux命令,并使用
时间
计算执行时间:

导入时间
从子流程导入Popen、PIPE
开始=时间。时间()
p1=Popen([“my_linux_cmd”],stdout=PIPE)
打印(p1.communicate())#输出
end=time.time()
执行时间=结束-开始
打印(执行时间)#执行时间
查看有关可用选项的更多详细信息


警告:要打印标准输出,您也可以使用
Popen.stdout.read
但使用
communicate()
而是为了避免由于任何其他操作系统管道缓冲区填满并阻塞子进程而导致的死锁。

一种留在shell中的更简单方法是使用
time
命令的格式化选项
-f
。您可以这样使用它:

$ 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
请查看
工时
,了解有关格式化
时间

当然,您也可以直接运行以下命令(即不使用变量):


玩得开心

一种留在shell中的简单方法是使用
time
命令的格式化选项
-f
。您可以这样使用它:

$ 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
请查看
工时
,了解有关格式化
时间

当然,您也可以直接运行以下命令(即不使用变量):


玩得开心

bash-c“time test_command”>/tmp/logfile 2>&1
&然后
head-n-4/tmp/stdout err
tail-n4/tmp/timeing data
@anishane:看起来像是一个过分的建议。另外,在不必要时使用临时文件可能会导致意外行为(只需考虑使用不同的“test_命令”多次运行您的命令即可)
bash-c“time test_命令”>/tmp/logfile 2>&1
&然后
head-n-4/tmp/stdout-err
tail-n4/tmp/定时数据
@anishane:看起来像是一个过分的建议。另外,在不必要的情况下使用临时文件可能会导致意外行为(只需考虑使用不同的“test_命令”多次运行您的命令即可)。您所说的
time
命令通常位于我的工作环境中缺少的
/usr/bin/time
中。。。这是我编写原始bash脚本的问题之一。我的
时间
是unix中内置的时间。是的,没错。我相应地修改了我的答案。如果
/usr/bin/time
不适用于您。。。您可以选择Python:)。我之所以给出我的答案,是因为它可能会引起你身边的人的兴趣。不管怎样,谢谢你的回答,希望你的编辑能帮助别人:)你所说的
time
命令通常在我的工作环境中缺少的
/usr/bin/time
中。。。这是我编写原始bash脚本的问题之一。我的
时间
是unix中内置的时间。是的,没错。我相应地修改了我的答案。如果
/usr/bin/time
不适用于您。。。您可以选择Python:)。我之所以给出我的答案,是因为它可能会引起你身边的人的兴趣。无论如何,谢谢你的回答,希望你的编辑能帮助别人:)