2012-02-19 11 views
11

Wywołuję skrypt Pythona (B) z innego skryptu Pythona (A).Jak przekierować standardowe wyjście do pliku podczas korzystania z podprocesu.call w pythonie?

Korzystanie z subprocess.call, w jaki sposób mogę przekierować stdout B do pliku, który określa?

Używam Pythona 2.6.1.

+1

Dlaczego używasz ' subprocess.call() ', aby uruchomić inny skrypt Pythona? Czy nie byłoby lepiej "zaimportować" go i wywołać odpowiednie funkcje? – Johnsyweb

+0

Skrypt B jest skryptem opakowującym, który wywołuje A, do którego chcę wysłać listę argumentów, które przeglądam. – Frez

Odpowiedz

32

Przeciągnij plik jako parametr do subprocess.callstdout:

with open('out-file.txt', 'w') as f: 
    subprocess.call(['program'], stdout=f) 
+0

Dzięki icktoofay! – Frez

+1

... a to przypomniało mi, że mogę też wstawić 'stderr = f'. – sage

+0

to nie wyświetla dzienników na żywo na ekranie –

1

Alternatywnym podejściem

import subprocess 
p=subprocess.Popen('lsblk -l|tee a.txt',stdout=subprocess.PIPE,shell=True) 
(output,err)=p.communicate() 
p_status=p.wait() 
print output 

Powyższy kod wypisze wyjście polecenia do pliku a.txt

Powiązane problemy