Как запустить «ps cax | grep что-то "в Python?

Как запустить команду с помощью pipe | в этом?

Модуль подпроцесса кажется сложным …

  • Какое наилучшее решение для пула соединений с базой данных в python?
  • Прерывания клавиатуры с многопроцессорным пулом python
  • как устранить проблему «AttributeError: __exit__» в многопроцессорности в Python?
  • Есть что-то вроде

     output,error = `ps cax | grep something` 

    как в сценарии оболочки?

  • Какое наилучшее решение для пула соединений с базой данных в python?
  • Прерывания клавиатуры с многопроцессорным пулом python
  • как устранить проблему «AttributeError: __exit__» в многопроцессорности в Python?
  • 5 Solutions collect form web for “Как запустить «ps cax | grep что-то "в Python?”

    См. Замена конвейера оболочки :

     import subprocess import shlex proc1 = subprocess.Popen(shlex.split('ps cat'),stdout=subprocess.PIPE) proc2 = subprocess.Popen(shlex.split('grep python'),stdin=proc1.stdout, stdout=subprocess.PIPE,stderr=subprocess.PIPE) proc1.stdout.close() # Allow proc1 to receive a SIGPIPE if proc2 exits. out,err=proc2.communicate() print('out: {0}'.format(out)) print('err: {0}'.format(err)) 

    PS. Использование shell=True может быть опасным. См., Например, предупреждение в документах.


    Существует также модуль sh, который может сделать скрипты подпроцесса в Python намного более приятными:

     import sh print(sh.grep(sh.ps("cax"), 'something')) 

    Вы уже приняли ответ, но:

    Вам действительно нужно использовать grep? Я бы написал что-то вроде:

     import subprocess ps = subprocess.Popen(('ps', 'cax'), stdout=subprocess.PIPE) output = ps.communicate()[0] for line in output.split('\n'): if 'something' in line: ... 

    У этого есть преимущества, не связанные с shell=True и его рискованностью, не откапываясь от отдельного процесса grep и выглядящим очень похожим на тип Python, который вы должны писать для обработки файлов, подобных файлу.

     import subprocess process = subprocess.Popen("ps cax | grep something", shell=True, stdout=subprocess.PIPE, ) stdout_list = process.communicate()[0].split('\n') 

    Отбросьте этот подпроцесс «ps» и медленно отпустите! 🙂

    Вместо этого используйте модуль psutil .

     import os os.system('ps -cax|grep something') 

    Если вы хотите заменить аргумент grep некоторой переменной:

     os.system('ps -cax|grep '+your_var) 
    Python - лучший язык программирования в мире.