2015-10-16 53 views
0

我正在使用「popen」來獲取linux中的進程列表。因爲我是python的新手,我不知道如何搜索我的進程processes.Below的名單我加入我的代碼片段:Python popen腳本來搜索linux中進程中運行的命令

import os 
p = os.popen('ps -aef',"r") 
while 1: 
    line = p.readline() 
    if not line: break 
    print line 

我想搜索命令「蟒蛇./yowsup-cli演示-c配置-e」是否正在運行與否,如果沒有運行運行此命令。我應該如何迭代進程來檢查這個並重新啓動。 任何人都可以幫助我的方法。

+0

你也可以看看這個:https://github.com/giampaolo/psutil - 一個debian-like系統它是'蟒蛇,psutil'包上。 –

回答

1

您可以改用readlines()和list comprehension。 那麼你的代碼應該是這個樣子:

command_to_run = "python ./yowsup-cli demos -c config -e" 
if not any([command_to_run in line for line in p.readlines()]): 
    # run your command 

請注意,這將運行命令,即使指定了更廣泛的命令行,如「巨蟒./yowsup-cli演示-c配置-e -a -b -c「,但在這種情況下我只是沒有發現它可能發生,所以代碼會很好。

+0

我試過這個,它爲我工作,但現在我得到「關閉文件對象析構失敗: sys.excepthook丟失 失去sys.stderr」錯誤 – user3932077

1

我建議您在python中運行linux os命令時使用subprocess。其次,您應該使用grep來過濾命令的輸出。 ps命令可能會返回多行,所以stdout應保存到列表中。至於你需要一個例子:

import subprocess 

def subprocess_cmd(command): 
    process = subprocess.Popen(command, stdout=subprocess.PIPE, shell=True) 
    proc_stdout = process.communicate()[0].strip() 
    return proc_stdout 

process_ids = subprocess_cmd("ps -ef |grep python |grep yowsup-cli |grep -v grep |awk '{ print $2 }'") 
process_ids_list = process_ids.split('\n') 
if process_ids_list == ['']: 
    print = 'STOPPED' 
else: 
    print = 'RUNNING'