从字符串执行命令并对其计时
executing a command from a string and timing it
我需要编写一个脚本来接收多个参数,其中最重要的一个
是一个包含命令的字符串(在 linux 中)。
我需要能够 运行 它,将输出保留在 STDOUT 中(通常),但也要计时,然后输出一些 .csv 文件。
说它看起来像这样:
timing_script.py param "echo hello world; cat /tmp/foo_bar"
该命令每隔几毫秒就会将内容输出到 STDOUT,我需要它留在那里。我这么说是因为我之前尝试使用此脚本是在 bash
中,我不得不从 time
命令中 cut
来实际计时,这也意味着必须忽略输出命令。
我还必须将 param,0.345
之类的内容附加到 csv 文件。
如何从字符串执行命令并为其计时?
您可以使用 subprocess
到 运行 linux 来自字符串的命令和 time
来计算执行时间:
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 管道缓冲区填满并阻塞子进程。
留在 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
请查看 man time
以获取有关格式化 time
输出的更多示例
当然你也可以直接运行下面的命令(即不使用变量):
/usr/bin/time -f "myparam,%e" bash -c "echo bar ; cat /tmp/foobar"
玩得开心
我需要编写一个脚本来接收多个参数,其中最重要的一个
是一个包含命令的字符串(在 linux 中)。
我需要能够 运行 它,将输出保留在 STDOUT 中(通常),但也要计时,然后输出一些 .csv 文件。
说它看起来像这样:
timing_script.py param "echo hello world; cat /tmp/foo_bar"
该命令每隔几毫秒就会将内容输出到 STDOUT,我需要它留在那里。我这么说是因为我之前尝试使用此脚本是在 bash
中,我不得不从 time
命令中 cut
来实际计时,这也意味着必须忽略输出命令。
我还必须将 param,0.345
之类的内容附加到 csv 文件。
如何从字符串执行命令并为其计时?
您可以使用 subprocess
到 运行 linux 来自字符串的命令和 time
来计算执行时间:
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 管道缓冲区填满并阻塞子进程。
留在 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
请查看 man time
以获取有关格式化 time
当然你也可以直接运行下面的命令(即不使用变量):
/usr/bin/time -f "myparam,%e" bash -c "echo bar ; cat /tmp/foobar"
玩得开心