Shell给Python带来麻烦

问题描述

|
    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吗? 提前致谢。     

解决方法

您可以使用subprocess模块​​进行外壳处理并运行任意的shell命令,但是您可能需要考虑使用PSI或psutil模块之类的东西。 它们是非标准的,因此您必须下载并安装它们,但是它们将更加健壮并且可以抵抗错误。 (请记住,“ 1”输出格式可以在不同平台上改变)。这是一个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来修复os.system调用中的返回值。供您使用,只需将sshd替换为theserver.jar