写入文件、子进程。调用输出不返回任何内容

2024-09-27 19:33:09 发布

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

我有一个小代码,可以定期跟踪cpu的使用情况。不知何故,当我试图创建一个文件(“wb”或“w”模式)文件被创建,但它是空的。知道为什么会这样吗?在

不使用文件处理程序:

import subprocess
import os

MESSAGE = "mpstat -P ALL | awk '{print $4}'"
SLEEP = "sleep 1"

cmds = [MESSAGE, SLEEP]


def runCommands(commands = cmds):
    count =0
    while True:
            for cmd in cmds:
                    count+=1
                    subprocess.call(cmd, shell = True)


runCommands()

使用文件处理程序:

^{pr2}$

mpstat提供标准输出(不是标准错误)。目标是使用python收集每秒的cpu和内存使用情况,并嵌入到应用程序中以收集数据并以图形方式输出。我知道psutil在这方面是一个很好的框架,但是如果您不经常使用它的话。它也可以解决我的问题,因为最终我有一个图形输出,其中包含内存和每秒的cpu使用量。在

最后,我要寻找的输出形式如下:

      %CPU   %MEM 

      ..      ..
      ..      ..
      ..      ..

最后,一个时间vs CPU和时间vs内存就足够了。我只是通过获取cpu值来解决这个问题的一个步骤。ps aux似乎不是一个很好的命令来完成我需要的操作,尽管它给出的输出与我想要的类似。任何想法/想法/建议。在


Tags: 文件内存importcmdtrue处理程序messagecount
1条回答
网友
1楼 · 发布于 2024-09-27 19:33:09

当您用'w'参数打开一个文件时,它每次都会被重新创建,这意味着当您的while循环完成时(在您的示例中不会这样做,但我们假设它确实是这样的)sleep 1命令不会打印任何内容。打开带有'a'(append)标志的文件,您将得到所有mpstat输出。

请参阅http://docs.python.org/2/tutorial/inputoutput.html#reading-and-writing-files以获取完整参考。

但总的来说,试着用Python做更多的处理,减少对OS命令的依赖,如下所示(尽管我仍然根本不做AWK的工作,但是无论如何)。

import subprocess
import os
import time

CPU = "mpstat -P ALL | awk 'NR==4 { print $3 }'"
MEM = "free -m | awk 'NR==3 { print $4 }'"

def runCommands():
    count = 0
    f = open('cpu_usage.txt', 'a')
    while True:
         t = str(int(time.time()))
         cpu = subprocess.check_output(CPU, shell = True).strip()
         mem = subprocess.check_output(MEM, shell = True).strip()

         f.write(' '.join([t, cpu, mem]))
         f.write('\n')
         f.flush()

         time.sleep(1)

runCommands()

相关问题 更多 >

    热门问题