Python:获取Popen实例的命令名称

时间:2012-06-12 00:14:39

标签: python python-2.7 popen

我有一个通过subprocess.Popen创建的Popen类的实例。我想得到该过程的名称,但我找不到任何方法或实例变量可以让我得到它。例如,如果我有:

p = subprocess.Popen('ls')

我想找一个方法来给我这个过程的名称,就像这样:

>>> p.name()
ls

2 个答案:

答案 0 :(得分:5)

答案是否定的,直到最新版本的Python(非稳定版)。

查看the source for 3.2.3,您可以看到信息未存储在对象中(它被丢弃)。但是,在the latest development version of Python中,它已添加为subprocess.Popen.args

因此,假设这使它成为3.3,那么你唯一一次将其视为一个特征。开发文档没有提到它,但可能只是它们没有被更新。事实上,它没有前缀(_args),这意味着它应该是一个公共属性。

如果您迫切希望将此作为对象的一部分,最简单的答案就是继承subprocess.Popen()并自己添加数据。也就是说,在大多数情况下,我真的不认为这是值得的。

>>> class NamedPopen(Popen):
...     def __init__(self, cargs, *args):
...         Popen.__init__(self, cargs, *args)
...         self.args = cargs
... 
>>> x = NamedPopen("ls")
>>> x.args
'ls'

答案 1 :(得分:4)

正如Lattyware所提到的,如果你自己打电话给Popen,你可以保存它然后再检索。您实际上并不需要使用容器类来执行此操作,因为您可以将其存储在实例的内部 dict 中:

>>> import subprocess
>>> 
>>> to_exec = 'ls'
>>> p = subprocess.Popen(to_exec)
>>> p.name = to_exec

然后再说:

>>> p.name
'ls'
>>>