Проблемы от Shell до Python - PullRequest
       29

Проблемы от Shell до Python

0 голосов
/ 13 апреля 2011
    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?

Заранее спасибо.

Ответы [ 2 ]

2 голосов
/ 13 апреля 2011

Вы можете выполнить оболочку с помощью модуля подпроцесс и выполнить произвольные команды оболочки, но вы можете рассмотреть возможность использования чего-то вроде модулей 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
1 голос
/ 13 апреля 2011

Скажем, я хочу узнать, нахожусь ли я на сервере, на котором запущен 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 на theserver.jar

...