Jaka jest różnica między subprocess.Popen()
i os.system()
?
python
subprocess
system
Arovit
źródło
źródło
sts = p.wait()
zamiast ostatniej linii.shell=True
jeśli możesz. Posiadanie tej opcji jest jedną z zalet programusubprocess.Popen()
i jego funkcji pomocniczych.os.system
isubprocess.call/popen/run
nie blokuje / czekać na polecenia do wykończenia: stackoverflow.com/a/14059648/4752883subprocess.Popen()
jest ścisłym super zestawemos.system()
.źródło
os.system
jest odpowiednikiemsystem
polecenia systemu Unix , podczas gdysubprocess
był modułem pomocniczym stworzonym w celu zapewnienia wielu ułatwień udostępnianych przezPopen
polecenia z łatwiejszym i kontrolowanym interfejsem. Zostały one zaprojektowane podobnie do polecenia Unix Popen .Natomiast:
Jeśli zastanawiasz się, którego użyć, użyj
subprocess
zdecydowanie, ponieważ masz wszystkie udogodnienia do wykonania oraz dodatkową kontrolę nad procesem.źródło
Podproces jest oparty na popen2 i jako taki ma wiele zalet - pełna lista w PEP jest tutaj , ale niektóre z nich to:
źródło
Podczas uruchamiania Pythona (cpython) w systemie Windows system
<built-in function system>
os.system będzie wykonywany pod zasłonami _wsystem, podczas gdy jeśli używasz systemu operacyjnego innego niż Windows, będzie on używał systemu .Wręcz przeciwnie, Popen powinien używać CreateProcess w oknach i _posixsubprocess.fork_exec w systemach operacyjnych opartych .
To powiedziawszy, ważna rada pochodzi od os.system docs, która mówi:
źródło