我尝试使用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命令。
我该如何解决?谢谢。
答案 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))