擅长:python、mysql、java
<p>由于您使用的是Unix,所以可以使用<code>time</code>命令。原则如下:</p>
<pre><code>import sys
import subprocess
p = subprocess.Popen(["time", "ls"], stdout=subprocess.PIPE, stderr=subprocess.PIPE)
for line in p.stdout: # ls output
sys.stdout.write(line)
time_output = p.stderr.readlines()
print "Stderr:", ''.join(time_output)
</code></pre>
<p>在我的机器上,它提供:</p>
^{pr2}$
<p>处理器总时间是<code>user</code>+<code>sys</code>时间(<code>real</code>是挂钟时间,它通常不表示程序使用了多少处理器时间:例如,<code>sleep 5</code>,<code>real</code>时间为5秒,<code>user</code>和{<cd3>}时间为0)。在</p>
<p>这是因为<code>time</code>输出了对实际执行时间(不仅仅是墙时间,它取决于其他进程正在运行的时间等)的详细计算,并将其输出到标准错误输出。您可以解析标准错误并获得计时信息。在</p>
<p>如果将输出数据编程为标准错误,则此方法可能不实用,因为该错误可能会干扰<code>time</code>命令的解析。在</p>
<p>另外,我还没有检查上面的代码是否不会发生死锁(我不确定如果调用的程序大量打印到标准错误会发生什么:程序是否会在读取标准错误缓冲区之前阻塞,如果Python程序正在读取标准输出,则可能不会发生这种情况?)。也就是说,如果您知道定时程序没有或很少有关于其标准错误的数据,我相信上面的代码不会死锁。在</p>