在Linux中搜索正在运行的进程命令的Python popen脚本

2024-04-18 09:53:54 发布

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

我正在使用“popen”获取进程列表linux。自从我是python新手,我不知道如何在列表中搜索我的进程流程。如下所示我正在添加代码段:

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

我想搜索命令“python./yowsup cli demos-c config-e”是否正在运行,如果没有运行,请运行这个命令命令。怎么做我应该迭代这个过程来检查这个,然后重新启动。 有谁能帮我接近吗。你知道吗


Tags: import命令列表readline进程oslinux代码段
2条回答

我建议您在python中运行linux操作系统命令时使用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'

您可以使用readlines()和list。 那么你的代码应该是这样的:

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

请注意,即使指定了更宽的命令行,例如“python./yowsup cli demos-c config-e-a-b-c”,这也会运行您的命令,但我发现在这种情况下不太可能发生这种情况,因此代码可以正常运行。你知道吗

相关问题 更多 >