2013-06-02 27 views
0

我有一個小的代碼,它會定期跟蹤cpu的使用情況。不知什麼時候,當我嘗試創建一個文件(「wb」或「w」模式)文件被創建,但它是空的。任何想法爲何如此?寫入文件,子進程。調用輸出不會返回任何內容

W/O文件處理機:

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() 

隨着文件處理程序:

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 
      with open('cpu_usage.txt', 'w')as f: 
       subprocess.call(cmd, stdout = f, shell = True) 


runCommands() 

mpstat的給出了一個標準輸出(不是一個標準誤差)。其目標是每隔一秒使用python收集cpu和內存使用量,並將其嵌入到應用程序中以收集數據並以圖形方式輸出相同數據。我知道psutil在這方面是一個很好的框架,但是如果你沒有玩過它的話。它也可以解決我的問題,因爲最終我有一個圖形輸出,其中包含每秒使用mem和cpu的情況。

最後,我要尋找的輸出是下面的形式:

 %CPU %MEM 

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

,並在最後一個時間與CPU時間和內存VS將足夠的需求。我只是通過獲取CPU值來解決這個問題。 ps aux似乎不是一個很好的命令來做我需要的東西,雖然它給出了與我想要的相似的輸出。任何想法/想法/建議。

+0

解決您的縮進:P –

+0

爲什麼不ü用subprocess.popen()從u能的std出和std犯錯太 – Rajeev

+0

我不需要標準錯誤的mpstat的是給了我標準輸出。 –

回答

1

當你打開一個文件與「W」的說法,這是創建重新每一次,這意味着當你while循環結束(它不會在你的榜樣,但是讓我們假設它) - 該文件執行的最後一件事是sleep 1命令,該命令不會打印任何內容。用'a'(追加)標誌打開文件,你將得到所有的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() 
+0

不錯。這最終給我的文件與各自的內容。 AN建議如何獲取寫入同一文件的內存和CPU使用率統計信息?我正在考慮使用'psutil.virtual_memory()',但是開銷f創建一個新文件,解析和繪圖將會太多。 –

+0

對不起,錯過了這部分問題。您可以在原始問題中指定您希望輸出文件最終看起來像什麼格式 - 可能有助於回答。乾杯 –

+0

嗨馬丁,我更新了原來的問題。讓我知道你是否有任何想法。 –

相關問題