有没有办法用操作系统在python中?

2024-03-28 22:36:12 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图使用python的日志记录linux中特定进程的CPU和RAM消耗的输出操作系统()命令。为了区分每次迭代的输出,我在上面和下面添加了带有迭代号的print语句操作系统()命令。在

我的代码如下:

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后的输出脚本.py>;&;日志.txt. (我在linuxenv中运行这个脚本)-部分输出

^{pr2}$

我怎样才能在python中得到像下面这样的输出?在

----CPU----
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
<iteration-number>

期待社会各界的回答和评论。另外,如果这是一个重复的问题,请给我指出一个类似的问题,因为我没有得到类似的问答。在


Tags: 命令脚本进程oslinux记录gui语句
2条回答

似乎os.systemprint使用不同的缓冲区,它们在不同的时间刷新!(有关说明,请参见herecrosslink

以下操作适用于我(强制刷新输出):

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
  • 使用subprocess.check_output()
  • 对idividual进程(而不是生成一个shell)进行管道化,这是一个比较冗长的过程(请参见here

希望有帮助

厄本的回答给出了很好的背景和一般的提示。。。在

。。。来回答你的问题。您只需在一行程序的每个调用中添加一个date调用,例如

op=os.system("date && ps -raxxxo pid,%cpu,%mem,vsize,time,command | grep -E 'java|gui' ")

或者

^{pr2}$

对于可读性较差、但输出更清晰的内容。在

相关问题 更多 >