我有一个通过subprocess.Popen创建的Popen类的实例。我想得到该过程的名称,但我找不到任何方法或实例变量可以让我得到它。例如,如果我有:
p = subprocess.Popen('ls')
我想找一个方法来给我这个过程的名称,就像这样:
>>> p.name()
ls
答案 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'
>>>