I want to use
ps -A | grep 'process_name'.
I tried various solutions but so far nothing worked. Can someone guide me how to do it?
How to use `subprocess` command with pipes
Each Answer to this Q is separated by one/two green lines.
I want to use
To use a pipe with the
subprocess module, you have to pass
However, this isn’t really advisable for various reasons, not least of which is security. Instead, create the
grep processes separately, and pipe the output from one into the other, like so:
ps = subprocess.Popen(('ps', '-A'), stdout=subprocess.PIPE) output = subprocess.check_output(('grep', 'process_name'), stdin=ps.stdout) ps.wait()
In your particular case, however, the simple solution is to call
subprocess.check_output(('ps', '-A')) and then
str.find on the output.
Or you can always use the communicate method on the subprocess objects.
cmd = "ps -A|grep 'process_name'" ps = subprocess.Popen(cmd,shell=True,stdout=subprocess.PIPE,stderr=subprocess.STDOUT) output = ps.communicate() print(output)
The communicate method returns a tuple of the standard output and the standard error.
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()
import subprocess ps = subprocess.run(['ps', '-A'], check=True, capture_output=True) processNames = subprocess.run(['grep', 'process_name'], input=ps.stdout, capture_output=True) print(processNames.stdout)
Also, try to use
'pgrep' command instead of
'ps -A | grep 'process_name'
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 @22.214.171.124 +notcp www.google.com|grep 'Query'" ps = subprocess.Popen(cmd,shell=True,stdout=subprocess.PIPE,stderr=subprocess.STDOUT) output = ps.communicate() print(output)
command = "ps -A | grep 'process_name'" output = subprocess.check_output(["bash", "-c", command])
After Python 3.5 you can also use:
import subprocess f = open('test.txt', 'w') process = subprocess.run(['ls', '-la'], stdout=subprocess.PIPE, universal_newlines=True) f.write(process.stdout) f.close()
The execution of the command is blocking and the output will be in process.stdout.