2012-06-12 1 views
3

subprocess.Popen을 통해 만든 Popen 클래스의 인스턴스가 있습니다. 그 프로세스의 이름을 얻고 싶습니다. 그러나 저를 처리 할 수있는 메소드 나 인스턴스 변수를 찾을 수 없습니다. 내가 가진 예를 들어, 상기까지Python : Popen 인스턴스의 명령 이름 얻기

>>> p.name() 
ls 
+4

이유는 데이터를 저장하지 당신은 실제로 당신이 바로 인스턴스의 내부 DICT에 저장할 수있는, 이렇게 사용하는 컨테이너 클래스가 필요하지 않습니다 전화 할 때? –

+2

'Popen.pid'를 해당 프로세스 이름과 일치시킬 수 있습니다. –

+0

@Michael - 프로세스가 종료되지 않은 경우에만. – jordanm

답변

5

대답은 '아니오 :

p = subprocess.Popen('ls') 

나는, 나에게 프로세스의 이름을 제공하는 방법을 찾기 위해 같이 일하는 것이 뭔가를하고 싶습니다 최신 버전의 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' 
4

Lattyware에서 언급했듯이 Popen 전화를 걸면 나중에 저장하기 만하면됩니다. 나중에 다음

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

과 :

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