当参数传递参数时,在python中调用子进程

时间:2018-02-27 16:18:26

标签: python subprocess

我正在尝试调用子进程,这是子进程:

def data_PID(pid):

   print(pid)

   pid = str(pid)

   data = subprocess.getoutput("ps -l | grep pid ")

   print(data)

PID是由控制台询问的,我想在subprocess.getoutput中搜索使用该PID的值,但我不知道该怎么做,例如,如果我在控制台中写入PID是4567,我想要子进程 “ps -l | grep 4567” 如果有人知道怎么做,我会感谢他。

2 个答案:

答案 0 :(得分:1)

我同意@dbeer。如果你想在这里使用psutil示例:

import psutil

def get_process_by_pid(pid: int):

    process = None
    for p in psutil.process_iter():
        if p.pid == pid:
            process = p
            break

    return process

然后您可以使用process对象并获取所有流程信息,如果您希望dict结构中的信息只需调用process.as_dict()

答案 1 :(得分:0)

通常,在API可用时使用子进程是个坏主意。 psutil模块可用于获取您正在寻找的信息。这样做要比启动单独的进程并解析输出要好得多,因为:

  1. 它会保存解析逻辑,这通常很难维护。
  2. 它避免了通过启动另一个过程引入的其他故障可能性。
  3. 速度更快。
  4. 但是,要回答第一个问题,如果您只想将变量写入字符串:

    cmd = "ps -l | grep %s" % (pid)
    data = subprocess.getoutput(cmd)