2010-12-10 17 views

Odpowiedz

34
>>> import subprocess 
>>> cmd = [ 'echo', 'arg1', 'arg2' ] 
>>> output = subprocess.Popen(cmd, stdout=subprocess.PIPE).communicate()[0] 
>>> print output 
arg1 arg2 

>>> 

Występuje błąd w korzystaniu z podprocesu.PIPE. Dla ogromnej stosowania tego wyjścia:

import subprocess 
import tempfile 

with tempfile.TemporaryFile() as tempf: 
    proc = subprocess.Popen(['echo', 'a', 'b'], stdout=tempf) 
    proc.wait() 
    tempf.seek(0) 
    print tempf.read() 
+0

jesteś moim zbawcą !!! Szukałem czegoś takiego od wielu dni !!! Dziękuję Ci! –

14

Zamiast tego użyj subprocess module.

pipe = Popen("pwd", shell=True, stdout=PIPE).stdout 
output = pipe.read() 

W Pythonie 2.7 można również użyć funkcji check_output().

4

Można użyć Popen w subprocess jak sugerują.

z os, która nie polecam, to jak poniżej:

import os 
a = os.popen('pwd').readlines() 
+0

To nie działa. Obiekty 'Popen' nie mają metody' readlines() '. –

+0

Dzięki za wskazanie, działa tylko dla os.popen – gerry

+3

'os.popen' jest przestarzałe na rzecz' subprocess.Popen'. –

0

Najprostszym sposobem jest użycie polecenia biblioteka

import commands 
print commands.getstatusoutput('echo "test" | wc') 
+2

Skąd masz moduł poleceń? Wygląda na to, że Python3 nie działa na pip. – Shule

Powiązane problemy