Jeśli chcesz zapisać dane wyjściowe do pliku, możesz użyć argumentu stdout z subprocess.call
.
To trwa None
, subprocess.PIPE
, obiekt pliku lub deskryptora pliku. Pierwsza jest domyślna, stdout jest dziedziczona z rodzica (twojego skryptu). Drugi pozwala ci przeskakiwać z jednego polecenia / procesu do drugiego. Trzeci i czwarty to to, czego chcesz, aby dane wyjściowe zostały zapisane do pliku.
Musisz otworzyć plik z czymś podobnym open
i przekazać liczbę całkowitą obiektu lub deskryptora pliku do call
:
f = open("blah.txt", "w")
subprocess.call(["/home/myuser/run.sh", "/tmp/ad_xml", "/tmp/video_xml"], stdout=f)
Domyślam się, że każdy poprawny obiekt podobny do pliku zadziała, jak gniazdo (sapnięcie :)), ale nigdy nie próbowałem.
Jak marcog wspomina w komentarzach, że możesz chcieć przekierować stderr, możesz przekierować to do tej samej lokalizacji co stdout za pomocą stderr=subprocess.STDOUT
. Każda z wyżej wymienionych wartości również działa, możesz przekierować w inne miejsca.
subprocess.call(["echo", "1", ">>", "t.txt"], shell=True)
powinno działać.shlex.quote
czy przekazujesz jakiekolwiek potencjalnie brudne dane do podpowłoki.with open("blah.txt","w") as f: subprocess.call(["/home/myuser/run.sh", "/tmp/ad_xml", "/tmp/video_xml"], stdout=f)
@SkurmedelOpcji
popen
można używać w programiecall
Więc...
subprocess.call(["/home/myuser/run.sh", "/tmp/ad_xml", "/tmp/video_xml"], stdout=myoutput)
Następnie możesz robić, co chcesz
myoutput
( przy okazji musiałby to być plik).Możesz również zrobić coś bliższego takiemu wyjściu potokowemu.
dmesg | grep hda
byłoby:
p1 = Popen(["dmesg"], stdout=PIPE) p2 = Popen(["grep", "hda"], stdin=p1.stdout, stdout=PIPE) output = p2.communicate()[0]
Na stronie podręcznika Pythona jest mnóstwo uroczych, przydatnych informacji .
źródło
Możesz także po prostu wywołać skrypt z terminala, wypisując wszystko do pliku, jeśli to pomoże. Tą drogą:
$ /path/to/the/script.py > output.txt
Spowoduje to nadpisanie pliku. Możesz użyć,
>>
aby dołączyć do niego.Jeśli chcesz, aby błędy były również rejestrowane w pliku, użyj
&>>
lub&>
.źródło