我想将subprocess.check_output()与ps -A | grep 'process_name'一起使用。我尝试了各种解决方案,但到目前为止都没有奏效。有谁能指导我怎么做吗?
subprocess.check_output()
ps -A | grep 'process_name'
zwghvu4y1#
要将管道与subprocess模块一起使用,必须传递shell=True。
subprocess
shell=True
然而,出于各种原因,这并不是真正可取的,尤其是安全方面的原因。相反,可以分别创建ps和grep进程,并通过管道将输出从一个进程传输到另一个进程,如下所示:
ps
grep
ps = subprocess.Popen(('ps', '-A'), stdout=subprocess.PIPE) output = subprocess.check_output(('grep', 'process_name'), stdin=ps.stdout) ps.wait()
然而,在您的特定情况下,简单的解决方案是在输出上调用subprocess.check_output(('ps', '-A')),然后调用str.find。
subprocess.check_output(('ps', '-A'))
str.find
icomxhvb2#
或者,您也可以始终对子进程对象使用通信方法。
cmd = "ps -A|grep 'process_name'" ps = subprocess.Popen(cmd,shell=True,stdout=subprocess.PIPE,stderr=subprocess.STDOUT) output = ps.communicate()[0] print(output)
通信方法返回标准输出和标准错误的元组。
vulvrdjw3#
使用subcess.run中的input,您可以将一个命令的输出传递给另一个命令。
input
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.decode('utf-8').strip())
z9ju0rcb4#
请参阅有关使用子进程:http://docs.python.org/2/library/subprocess.html#replacing-shell-pipeline设置管道的文档
我还没有测试以下代码示例,但它应该大致符合您的要求:
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]
a14dhokn5#
此外,尝试使用'pgrep'命令而不是'ps -A | grep 'process_name'
'pgrep'
'ps -A | grep 'process_name'
ghhaqwfi6#
您可以在sh.py中尝试管道功能:
import sh print sh.grep(sh.ps("-ax"), "process_name")
gstyhher7#
command = "ps -A | grep 'process_name'" output = subprocess.check_output(["bash", "-c", command])
7条答案
按热度按时间zwghvu4y1#
要将管道与
subprocess
模块一起使用,必须传递shell=True
。然而,出于各种原因,这并不是真正可取的,尤其是安全方面的原因。相反,可以分别创建
ps
和grep
进程,并通过管道将输出从一个进程传输到另一个进程,如下所示:然而,在您的特定情况下,简单的解决方案是在输出上调用
subprocess.check_output(('ps', '-A'))
,然后调用str.find
。icomxhvb2#
或者,您也可以始终对子进程对象使用通信方法。
通信方法返回标准输出和标准错误的元组。
vulvrdjw3#
使用subcess.run中的
input
,您可以将一个命令的输出传递给另一个命令。z9ju0rcb4#
请参阅有关使用子进程:http://docs.python.org/2/library/subprocess.html#replacing-shell-pipeline设置管道的文档
我还没有测试以下代码示例,但它应该大致符合您的要求:
a14dhokn5#
此外,尝试使用
'pgrep'
命令而不是'ps -A | grep 'process_name'
ghhaqwfi6#
您可以在sh.py中尝试管道功能:
gstyhher7#