2010-03-27 7 views
0

설명서를 읽었으며 REPL에서 많은 것을 시도하고 인터넷으로 검색했지만 실제로는 subprocess .Popen이 Python에서 작동하는 방식을 이해할 수 없습니다. 여기Ruby의 IO.popen 호출을 Python의 subprocess.Popen 호출로 변환하는 방법은 무엇입니까?

좀 루비 코드를 사용하고 있습니다 :

IO.popen("some-process") do |io| 
    while(line = io.gets) 
    # do whatever with line 
    end 
end 

어떻게 subprocess.Popen를 사용하여 파이썬으로이 번역합니까? 아마

+1

여기에'subprocess'을 사용하는 방법에 대한 많은 유용한 사례가 있습니다 http://blog.doughellmann.com /2007/07/pymotw-subprocess.html – unutbu

답변

2

파이썬에서 루비 코드의 간단한 "가까운 친척"

>>> import subprocess 
>>> io = subprocess.Popen('ls', stdout=subprocess.PIPE).stdout 
>>> for line in io: print(line.strip()) 
+0

'Popen'의'stdout'에서 읽는 것은 교착 상태에 빠질 위험이 있습니다. 차단이 허용되는 경우 일반적으로'communicate'를 사용하는 것이 좋습니다. –

+0

@Mike, 서브 프로세스가 stdin 첫 번째 작업을 닫으면 ('ls'처럼 - 루비 코드에서'some-process'가 루비 코드에서 더 잘했기 때문에 ** ** ** 입력을받지 않았습니다!) 내가 아는 어떤 OS에서도 교착 상태가 발생하지 않습니다. ** 표준을 사용하는 하위 프로세스 만 생각할 수있는 위험에 노출되어 있으므로 "일반적으로"귀하의 "일반적으로"이 Q와 A 모두에 전혀 적용될 수 없습니다. –

0
import subprocess 

process = subprocess.Popen(['ls',], stdout=subprocess.PIPE) 
print process.communicate()[0] 
관련 문제