2011-04-13 97 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