Istnieją dwa sposoby wykonania przekierowania. Oba mają zastosowanie do jednego subprocess.Popen
lub subprocess.call
.
Ustaw argument słowa kluczowego shell = True
lub executable = /path/to/the/shell
i określ polecenie tak, jak je tam masz.
Ponieważ po prostu przekierowujesz dane wyjściowe do pliku, ustaw argument słowa kluczowego
stdout = an_open_writeable_file_object
gdzie obiekt wskazuje na output
plik.
subprocess.Popen
jest bardziej ogólny niż subprocess.call
.
Popen
nie blokuje, umożliwiając interakcję z procesem podczas jego działania lub kontynuowanie innych rzeczy w programie w języku Python. Wezwanie doPopen
zwraca Popen
obiekt.
call
robi blok. Chociaż obsługuje wszystkie te same argumenty co Popen
konstruktor, więc nadal możesz ustawić dane wyjściowe procesu, zmienne środowiskowe itp., Twój skrypt czeka na zakończenie programu icall
zwraca kod reprezentujący stan wyjścia procesu.
returncode = call(*args, **kwargs)
to w zasadzie to samo, co dzwonienie
returncode = Popen(*args, **kwargs).wait()
call
to tylko funkcja zapewniająca wygodę. Jego implementacja w CPythonie znajduje się w subprocess.py :
def call(*popenargs, timeout=None, **kwargs):
"""Run command with arguments. Wait for command to complete or
timeout, then return the returncode attribute.
The arguments are the same as for the Popen constructor. Example:
retcode = call(["ls", "-l"])
"""
with Popen(*popenargs, **kwargs) as p:
try:
return p.wait(timeout=timeout)
except:
p.kill()
p.wait()
raise
Jak widać, jest to cienkie opakowanie Popen
.
call()
wydaje się być bardzo jasna. Czy możesz podać cytat lub link, abyśmy wiedzieli, na czym należy się skupić w odpowiedzi?