2011-07-11 21 views
48

Chcę uzyskać dane wyjściowe z niektórych poleceń powłoki, takich jak ls lub df w skrypcie python. Widzę, że commands.getoutput('ls') jest przestarzałe, ale subprocess.call('ls') dostanie mi tylko kod powrotu.python getoutput() odpowiednik podprocesu

Mam nadzieję, że istnieje proste rozwiązanie.

Odpowiedz

70

Zastosowanie subprocess.Popen:

import subprocess 
process = subprocess.Popen(['ls', '-a'], stdout=subprocess.PIPE) 
out, err = process.communicate() 
print(out) 

Zauważ, że komunikować bloki, aż proces kończy. Możesz użyć process.stdout.readline(), jeśli potrzebujesz wyjścia, zanim się zakończy. Aby uzyskać więcej informacji, patrz documentation.

+0

Prawidłowe obecny związek doc dla wersji 'subprocess' przykładów Python 2.7 jest: http://docs.python.org/library/subprocess.html#replacing-older-functions-with-the -subprocess-moduł; dla Python 3.2, http://docs.python.org/py3k/library/subprocess.html#replacing-older-functions-w-procesu przetwarzania-procesu –

+5

Prawdopodobnie musisz zastąpić subprocess.communicate() procesem. communic() - możesz również potrzebować kodu zakończenia podprocesu, wykonując process.returncode – Cinquo

+0

Nie zauważyłem, że napisałem podproces zamiast procesu. Naprawiony. –