【问题标题】:Error while trying to parse running processes through Python尝试通过 Python 解析正在运行的进程时出错
【发布时间】:2018-08-08 10:32:40
【问题描述】:

我尝试使用 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)

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

Traceback(最近一次调用最后一次):文件“ratalert.py”,第 6 行,在 runningprox = subprocess.check_output(cmd) #returns output as byte string File "/usr/local/lib/python3.6/subprocess.py", line 336, in 检查输出 **kwargs).stdout 文件“/usr/local/lib/python3.6/subprocess.py”,第 403 行,运行中 使用 Popen(*popenargs, **kwargs) 作为进程:文件“/usr/local/lib/python3.6/subprocess.py”,第 707 行,在 init restore_signals,start_new_session)文件“/usr/local/lib/python3.6/subprocess.py”,第 1333 行,在 _execute_child raise child_exception_type(errno_num, err_msg) FileNotFoundError: [Errno 2] No such file or directory: 'ps -A'

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

我该如何解决这个问题?谢谢。

【问题讨论】:

  • 其实ps一个文件,试试/bin/ps -A
  • @gogaz 刚刚尝试过,但我收到了相同的错误消息

标签: python subprocess


【解决方案1】:

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

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

否则,它会将您传递的字符串视为单个命令,并会查找名称为 ps -A 的可执行文件,包括空格等等。

您可以像 shell 一样使用 shlex 进行拆分:

import shlex, subprocess

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

【讨论】:

    猜你喜欢
    • 2013-03-06
    • 2019-11-26
    • 2020-06-09
    • 2017-09-27
    • 2021-06-26
    • 2014-10-20
    • 2020-06-14
    • 1970-01-01
    • 2017-09-12
    相关资源
    最近更新 更多