How to use `subprocess` command with pipes

后端 未结 9 1459
春和景丽
春和景丽 2020-11-22 02:32

I want to use subprocess.check_output() with ps -A | grep \'process_name\'. I tried various solutions but so far nothing worked. Can someone guide

相关标签:
9条回答
  • 2020-11-22 03:07

    See the documentation on setting up a pipeline using subprocess: http://docs.python.org/2/library/subprocess.html#replacing-shell-pipeline

    I haven't tested the following code example but it should be roughly what you want:

    query = "process_name"
    ps_process = Popen(["ps", "-A"], stdout=PIPE)
    grep_process = Popen(["grep", query], stdin=ps_process.stdout, stdout=PIPE)
    ps_process.stdout.close()  # Allow ps_process to receive a SIGPIPE if grep_process exits.
    output = grep_process.communicate()[0]
    
    0 讨论(0)
  • 2020-11-22 03:10
    command = "ps -A | grep 'process_name'"
    output = subprocess.check_output(["bash", "-c", command])
    
    0 讨论(0)
  • 2020-11-22 03:14

    JKALAVIS solution is good, however I would add an improvement to use shlex instead of SHELL=TRUE. below im grepping out Query times

    #!/bin/python
    import subprocess
    import shlex
    
    cmd = "dig @8.8.4.4 +notcp www.google.com|grep 'Query'"
    ps = subprocess.Popen(cmd,shell=True,stdout=subprocess.PIPE,stderr=subprocess.STDOUT)
    output = ps.communicate()[0]
    print(output)
    
    0 讨论(0)
提交回复
热议问题