2
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(),但它提供了标记化的参数,我对此不感兴趣,并且加入它们不会一直产生预期的结果,因为可以从结果的第二次打印中可以看出。

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

编辑

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

4

2 回答 2

0

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

于 2016-01-19T21:51:59.957 回答
0

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

于 2016-01-19T21:28:53.560 回答