尝试通过Python解析运行中的进程时出错

时间:2018-08-08 10:32:40

标签: python subprocess

我尝试使用Subprocess python模块解析计算机(Debian OS)中正在运行的程序。这是我的代码:

import subprocess

cmd = "ps -A" # Unix command to get running processes

runningprox = subprocess.check_output(cmd) #returns output as byte string

rpstring = runningprox.decode("utf-8") 
#converts byte string to string and puts it in a variable

print(rpstring)

但是,当我运行代码时,出现以下错误消息:

  

回溯(最近一次通话最后一次):文件“ ratalert.py”,第6行,在          runningprox = subprocess.check_output(cmd)#以字节字符串文件“ /usr/local/lib/python3.6/subprocess.py”的形式返回输出,行336,在   check_output       ** kwargs).stdout文件“ /usr/local/lib/python3.6/subprocess.py”,第403行,正在运行       使用Popen(* popenargs,** kwargs)作为进程: init 中的文件“ /usr/local/lib/python3.6/subprocess.py”,第707行       restore_signals,start_new_session)文件“ /usr/local/lib/python3.6/subprocess.py”,行1333,在_execute_child中       引发child_exception_type(errno_num,err_msg)FileNotFoundError:[Errno 2]没有这样的文件或目录:'ps -A'

我不明白为什么会收到此错误消息。考虑到“ ps -A”既不是文件也不是目录,而只是我将变量作为字符串放入的Unix命令。

我该如何解决?谢谢。

1 个答案:

答案 0 :(得分:0)

subprocess.check_output函数需要一个包含命令及其参数的列表,如下所示:

runningprox = subprocess.check_output(['ps', '-A'])

否则,它将把您传递的字符串作为单个命令处理,并将查找名称为ps -A,包含空格和所有名称的可执行文件。

您可以使用shlex进行拆分,就像shell那样:

import shlex, subprocess

cmd = 'ps -A'
runningprox = subprocess.check_output(shlex.split(cmd))