tro*_*ino 4 python popen python-2.7
我有一个通过subprocess.Popen创建的Popen类的实例.我想获得该进程的名称,但我找不到任何方法或实例变量可以让我得到它.例如,如果我有:
p = subprocess.Popen('ls')
Run Code Online (Sandbox Code Playgroud)
我想找一个方法来给我这个过程的名称,这个方法就像:
>>> p.name()
ls
Run Code Online (Sandbox Code Playgroud)
答案是否定的,直到最新版本的Python(非稳定版).
纵观源为3.2.3,您可以看到信息没有存储在对象(被丢弃).但是,在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'
Run Code Online (Sandbox Code Playgroud)
小智 6
正如 Lattyware 所提到的,如果您自己进行 Popen 调用,您可以先保存它,然后再检索。您实际上不需要容器类来执行此操作,因为您可以将其存储在实例的内部dict中:
>>> import subprocess
>>>
>>> to_exec = 'ls'
>>> p = subprocess.Popen(to_exec)
>>> p.name = to_exec
Run Code Online (Sandbox Code Playgroud)
然后后来:
>>> p.name
'ls'
>>>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3003 次 |
| 最近记录: |