Jak przekierować wywołanie podprocesu do pliku tekstowego?
subprocess.call(["/home/myuser/run.sh", "/tmp/ad_xml", "/tmp/video_xml"])
W tej chwili mam skrypt, który prowadzę. Kiedy go uruchamiam i uderza w tę linię, zaczyna drukować rzeczy, ponieważ run.sh ma odciski palców.
Jak mogę to również przesłać do pliku tekstowego? (A także wydrukować, jeśli to możliwe)
2 answers
Jeśli chcesz zapisać wyjście do pliku, możesz użyć stdout -argumentu subprocess.call
.
It takes None
, subprocess.PIPE
, obiekt pliku lub deskryptor pliku. Pierwszy jest domyślny, stdout jest dziedziczony od rodzica (twojego skryptu). Drugi pozwala na przesyłanie z jednego polecenia / procesu do drugiego. Trzeci i czwarty są tym, co chcesz, aby wynik został zapisany do pliku.
Musisz otworzyć plik z czymś takim jak open
i przekazać obiekt lub deskryptor pliku liczba całkowita do call
:
f = open("blah.txt", "w")
subprocess.call(["/home/myuser/run.sh", "/tmp/ad_xml", "/tmp/video_xml"], stdout=f)
Zgaduję, że każdy poprawny obiekt podobny do pliku będzie działał, jak gniazdo (gasp:)), ale nigdy nie próbowałem.
Ponieważ marcog wspomina w komentarzach, że możesz również przekierować stderr, Możesz przekierować go do tej samej lokalizacji, co stdout za pomocą stderr=subprocess.STDOUT
. Każda z wyżej wymienionych wartości działa również, można przekierować do różnych miejsc.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:26:30
Opcje dla popen
mogą być użyte w call
args,
bufsize=0,
executable=None,
stdin=None,
stdout=None,
stderr=None,
preexec_fn=None,
close_fds=False,
shell=False,
cwd=None,
env=None,
universal_newlines=False,
startupinfo=None,
creationflags=0
Więc...
subprocess.call(["/home/myuser/run.sh", "/tmp/ad_xml", "/tmp/video_xml"], stdout=myoutput)
Wtedy możesz zrobić co chcesz z myoutput
(który musiałby być plikiem btw).
Możesz również zrobić coś bliżej wyjścia rurociągowego, takiego jak to.
dmesg | grep hda
Byłoby:
p1 = Popen(["dmesg"], stdout=PIPE)
p2 = Popen(["grep", "hda"], stdin=p1.stdout, stdout=PIPE)
output = p2.communicate()[0]
Jest mnóstwo uroczych, przydatnych informacji na stronie podręcznika Pythona.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-01-31 22:01:45