2015-10-16 51 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'