我在文件中保存了一个长命令。
我还有一个输入文件的列表,我想将其传递给同一个命令,
所以我在两个地方有一个%s
说明符。在
$ cat https-tcp-session.txt
rm -f /tmp/A.raw /tmp/B.raw /tmp/result.raw; \
rwfilter --sport=443 --proto=6 --pass=stdout %s | \
rwsort --fields=sIP,dIP | \
rwgroup --id-fields=sIP,dIP --summarize | \
rwfilter --input-pipe=stdin --pass=/tmp/A.raw --packets=200-; \
rwfilter --dport=443 --proto=6 --pass=stdout %s | \
rwsort --fields=sIP,dIP | \
rwgroup --id-fields=sIP,dIP --summarize | \
rwfilter --input-pipe=stdin --pass=/tmp/B.raw --packets=200-; \
rwmatch --relate=1,2 --relate=2,1 \
/tmp/A.raw /tmp/B.raw /tmp/result.raw;
接下来我在python REPL上尝试它。在
^{pr2}$这似乎不对。 出于好奇,我放入了一个输入文件,并尝试从shell运行它
$ /usr/bin/time -f "%e" bash https-tcp-session.txt
17.73
我有一种感觉时间只是计时第一个命令在街区(rm)
正如您可能怀疑的那样,似乎您只对
https-tcp-session.txt
文件中的第一个命令运行time
。Python REPL中的代码将向bash
(或您使用的任何shell)发送如下内容:第一行末尾的分号结束命令,因此shell只在
rm
上运行time
。在一种可能的解决方法是将命令块包装在group中。这样,
time
作为一个整体在组上运行。在或者,您可以使用positional parameters。您可以将
^{2}$https-tcp-session.txt
命令中的%s
符号替换为$1
,该bash
将其解释为第一个命令行参数。然后可以将https-tcp-session.txt
作为shell脚本运行,传递要在$1
中使用的值作为命令行参数,例如:(请注意,我没有测试这两种方法。)
总是检查bash命令的返回值,它应该是0。 使用子流程模块代替操作系统http://docs.python.org/library/subprocess.html
在命令执行之前先在shell中尝试。在
您可以使用以下方法检查计时:
最简单的方法:
在为基准测试运行计时函数时,最好多次运行程序/命令并取平均值。所以:
^{2}$相关问题 更多 >
编程相关推荐