如何使用python从进程中获取原始命令行


import psutil
for p in psutil.process_iter():
    if p.name() == 'foo':
        print p.cmdline()
        print ' '.join(p.cmdline())
 
PROCESS:
   foo -p "Hello World"
RESULT:
   ['foo', '-p', 'Hello World']
   foo -p Hello World

我希望像 foo -p "Hello World" 年一样获取进程的原始命令行,我尝试使用 cmdline() 但它提供了标记化的参数,我对这些参数不感兴趣,并且加入它们不会一直产生预期的结果,从结果的第二次打印中可以看出。

有没有办法最好以可移植的方式实现这一点(也许使用其他库或以不同的方式进行)?

编辑

这是为了与已存储的命令进行比较。我的问题的另一个解决方案可能是,如果我可以获得静态命令字符串 ( foo -p "Hello World" ),而没有 args 周围的引号来进行比较,那么' '.join就可以了。这意味着,如果有一个函数执行 psutil 正在执行的 shell 参数标记化,它将解决我的命令比较问题。

使用 shlex.quote 会将数组重新组装成 shell 命令行,写入空格和其他特殊字符。

通过一些工作,您可以在 2.7 中使用 Lib/pipes。 https://docs.python.org/2/library/pipes.html

最新更新