Różnica między podprocesem.Popen i os.system
Jaka jest różnica między subprocess.Popen()
a os.system()
?
5 answers
Jeśli sprawdzisz sekcję podprocesu W Python docs , zauważysz, że istnieje przykład, jak zastąpić os.system()
przez subprocess.Popen()
:
sts = os.system("mycmd" + " myarg")
...robi to samo co...
sts = Popen("mycmd" + " myarg", shell=True).wait()
" ulepszony " kod wygląda bardziej skomplikowanie, ale jest lepszy, ponieważ kiedy już wiesz subprocess.Popen()
, nie potrzebujesz niczego więcej. subprocess.Popen()
zastępuje kilka innych narzędzi (os.system()
jest tylko jednym z nich), które zostały rozproszone po trzech innych modułach Pythona.
Jeśli to pomoże, pomyśl o subprocess.Popen()
jako bardzo elastyczny os.system()
.
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
2012-07-04 18:40:08
subprocess.Popen()
jest ścisłym super-zbiorem os.system()
.
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
2018-06-12 19:35:27
os.system
jest odpowiednikiem Uniksa system
command, podczas gdy {[2] } był modułem pomocniczym stworzonym w celu zapewnienia wielu udogodnień dostarczanych przez komendy Popen
z łatwiejszym i sterowalnym interfejsem. Zostały one zaprojektowane podobnie do polecenia Unix popen.
system()
wykonuje polecenie określone w command przez wywołanie/bin/sh -c command
i powraca po zakończeniu polecenia
}
Funkcja
popen()
otwiera proces tworząc rura, rozwidlenie i / align = "left" /
Jeśli zastanawiasz się, którego z nich użyć, użyj subprocess
zdecydowanie dlatego, że masz wszystkie udogodnienia Do wykonania, plus dodatkową kontrolę nad procesem.
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
2020-07-22 17:49:45
Podproces bazuje na popen2 i jako taki ma wiele zalet - pełna lista znajduje się w PEP tutaj , ale niektóre z nich to:
- używanie rury w powłoce
- lepsza obsługa newline
- lepsza obsługa wyjątków
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-27 06:09:21
Podczas uruchamiania Pythona (cpython) w systemie windows <built-in function system>
os.system będzie działał pod zasłoną _wsystempodczas gdy jeśli używasz systemu operacyjnego innego niż windows, będzie używał system.
Przeciwnie, Popen powinien używać CreateProcess w windows i _posixsubprocess.fork_exec w systemach operacyjnych opartych na posix.
To powiedziawszy, ważna rada pochodzi z os.system docs, który mówi:
Moduł podprocesu zapewnia mocniejsze urządzenia do tarła nowych procesów i odzyskiwanie ich wyników; korzystanie z tego modułu jest lepiej używać tej funkcji. Zobacz zastępowanie starszych funkcji z sekcją moduł podprocesu w dokumentacji podprocesu dla kilka przydatnych przepisów.
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
2018-03-09 03:19:49