2010-03-27 49 views
0

我已經閱讀過文檔,並且在REPL和Google中嘗試了很多東西,但是我無法理解subprocess .Popen如何在Python中工作。如何將Ruby的IO.popen調用轉換爲Python的subprocess.Popen調用?

下面是一些Ruby代碼我使用:

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

我如何使用subprocess.Popen翻譯成Python呢?

+1

有是如何在這裏使用'subprocess'許多有用的例子:http://blog.doughellmann.com /2007/07/pymotw-subprocess.html – unutbu 2010-03-27 21:07:45

回答

2

也許你的Ruby代碼Python中最簡單的 「近親」:

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

請注意,從'Popen'的'stdout'讀取存在死鎖的風險。如果阻塞是可以接受的,通常優選使用「溝通」。 – 2010-03-28 04:39:40

+0

@Mike,如果子進程只是關閉它的stdin的第一件事情(因爲'ls'的確如此 - 因爲''process''在Ruby代碼中最好做,因爲**從來沒有給出任何**輸入!在我知道的任何操作系統中都不會出現死鎖。只有**使用他們的標準輸入的子進程存在任何可能的風險 - 所以你的「一般」對於這個Q和我的A.都是完全不適用的。 – 2010-03-28 05:25:29

0
import subprocess 

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