我正在尝试使用python的os.system()命令记录linux中特定进程的CPU和RAM消耗的输出。为了区分每次迭代时的输出,我在os.system()命令的上方和下方添加了带有迭代次数的print语句。
我的代码如下:
B[1]
现在,在运行脚本并查看日志后,它不符合我的期望。我看到,对于所有迭代,首先打印os.system的输出,然后打印那些打印语句。这并不能帮助我区分每次迭代的输出。
运行python脚本后输出script.py>& log.txt中。 (我在linux env中运行这个脚本) - 部分输出
import os
i=0
while i<30:
print "----CPU----"
op=os.system("ps -raxxxo pid,%cpu,%mem,vsize,time,command | grep -E 'java|gui' ")
print i
i+=1
sleep(1.0/3.0)
如何在python中输出如下所示的输出?
1332 0.0 3.6 572960 5:56.04 /data/bin/gui
20978 0.0 0.5 79480 1:47.16 java
13040 0.0 0.0 18976 0:00.00 grep -E java|gui
1332 0.0 3.6 572960 5:56.04 /data/bin/gui
20978 0.0 0.5 79480 1:47.16 java
13043 0.0 0.0 18976 0:00.00 grep -E java|gui
----CPU----
0
1
----CPU----
0
2
期待社区的回答和评论。此外,如果这是一个重复的问题,请指出类似的问题,因为我没有得到类似的问答。
答案 0 :(得分:1)
似乎os.system
和print
使用在不同时间刷新的不同缓冲区! (有关解释,请参阅here和crosslink)
以下为我工作(强制刷新输出):
import os
import sys
from time import sleep
i=0
while i<30:
print "----CPU----"
sys.stdout.flush()
op=os.system("ps -e -o pid,%cpu,%mem,vsize,time,command | grep java | grep -v grep ")
sys.stdout.flush()
print i
sys.stdout.flush()
i+=1
sleep(1.0/3.0)
可替换地:
-u
标志禁用缓冲输出(python -u /tmp/test.py 1> /tmp/test.log
)希望有所帮助
答案 1 :(得分:0)
虽然城市的答案提供了很好的背景和一般提示......
...回答你的确切问题。您可以简单地为您的单行电话的每次通话添加date
来电,例如
op=os.system("date && ps -raxxxo pid,%cpu,%mem,vsize,time,command | grep -E 'java|gui' ")
或
op=os.system("date +%s && ps -raxxxo pid,%cpu,%mem,vsize,time,command | grep -E 'java|gui' ")
用于不太可读但更明显的输出。