ps -o cmd = <pid>不从Python提供相同的输出</pid>

时间:2015-02-23 16:07:23

标签: python python-2.7

来自Python:

output = os.popen("ps -o cmd=1").read()
print output

输出:

1
/bin/bash
python myPython.pyc
sh -c ps -o cmd=1
ps -o cmd=1

但是当我从终端运行该命令时,它会返回我想要的内容:

/sbin/init

另外,当我跑&#34; ls -l&#34;从python命令,它返回正确的东西。


我的主要目的是从Python中的PID中查找进程名称。 我该怎么办?

2 个答案:

答案 0 :(得分:1)

这并没有回答关于你为什么得到不同输出的问题,但更好的解决你所追求的目标的方法是:

  1. 打开并阅读/proc/<pid>/cmdline
  2. 阅读符号链接/proc/<pid>/exe
  3. 编辑:摆脱那里的popen电话以及随后的“无用cat”。这样做:

    with open("/proc/"+data.get("pid")+"/cmdline") as cmd:
        cmdinfo=cmd.read()
    command=cmdinfo.split("\0")
    print command[0]
    

答案 1 :(得分:1)

我知道你现在有了一个答案,但你原来的尝试不起作用的原因可能是因为popen创造了一个全新的过程,因此创造了一个不同的过程环境。

当我从终端运行'ps -o cmd = 1'时,我得到的结果与使用popen时的结果相似。

1
bash
ps -o cmd=1