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命令,但是您可能需要考虑使用PSI或psutil模块之类的东西。
它们是非标准的,所以你必须下载并安装它们,但它们将更加健壮和抗错误。(请记住,ps
输出格式可以在不同的平台上更改)。下面是一个示例psutil实现,它或多或少地完成了您要做的事情。显然,如果您需要检查的不仅仅是名称,请将'Python'
与'theserver.jar'
交换,或者使用p.exe
或p.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
假设我想知道我是否在运行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来修复来自操作系统的返回值。系统调用。您只需将sshd替换为server.jar