2011-04-13 150 views
0
if ! ps ax | grep -v grep | grep -v -i tmux | grep "theserver.jar" > /dev/null; then 
     echo "Server failed to start!" 
    else 
     echo "Server successfully started!" 
    fi 

请问我怎么用python做这个? 我想不出如何去做。请帮助:( 我可以使用使用os.system?Shell给Python的烦恼

在此先感谢。

+0

你*尝试*使用os.system(是的,你可以)。 – 2011-04-13 16:58:36

+0

我可以试试os.system吗?我没有尝试过任何东西,因为我不知道该怎么办。 – Riki137 2011-04-13 16:58:46

+0

os.system(“if!ps ax | grep -v grep | grep -v -i tmux | grep'theserver.jar'>/dev/null;然后 echo'服务器启动失败' else echo'服务器成功启动!' fi“) – Riki137 2011-04-13 17:00:45

回答

1

说我想看看我在一个服务器上运行的sshd(只是在您的示例jar文件替换)

import os 

command=" ps ax | grep -v grep | grep -v -i tmux | grep sshd" 

result = os.WEXITSTATUS(os.system(command)) 

if os.WEXITSTATUS(os.system(command)): 
    print "Server failed to start!" 
else: 
    print "Server successfully started!" 

您需要WEXITSTATUS修复从使用os.system调用的返回值。为了您的使用只是theserver.jar

2

取代的sshd你可以掏出与subprocess模块和运行任意壳命令,但您可能需要考虑使用诸如PSIpsutil模块之类的东西。

它们是非标准的,所以你将不得不下载并安装它们,但它们会更加健壮和抵御错误。 (请记住,ps输出格式可以在不同的平台上更改)。下面是一个psutil实现的例子,它或多或少地做了你想要做的事情。如果您需要检查的不仅仅是名称,显然将'Python'替换为'theserver.jar'或使用p.exep.cmdline

import psutil 

def find_processes_by_name(name): 
    for p in psutil.process_iter(): 
    try: 
     if p.name == name: 
     yield p.pid 
    except psutil.error.AccessDenied as e: 
     pass 

    raise StopIteration 

print "Python processes:" 
for pid in find_processes_by_name('Python'): 
    print '\t', pid