В чем разница между subprocess.Popen() и os.system()?
Разница между подпроцессом .Popen и os.system
Ответ 1
Если вы просмотрите раздел подпроцесса в документах Python, вы заметите, что есть пример того, как заменить os.system()
на subprocess.Popen()
:
sts = os.system("mycmd" + " myarg")
... делает то же самое, что...
sts = Popen("mycmd" + " myarg", shell=True).wait()
"Улучшенный" код выглядит более сложным, но лучше, потому что, как только вы знаете subprocess.Popen()
, вам больше ничего не нужно. subprocess.Popen()
заменяет несколько других инструментов (os.system()
является лишь одним из них), которые были разбросаны по трем другим модулям Python.
Если это помогает, подумайте о subprocess.Popen()
как очень гибкой os.system()
.
Ответ 2
subprocess.Popen() является строгим надмножеством os.system().
Ответ 3
Подпроцесс основан на popen2, и как таковой имеет ряд преимуществ - здесь есть полный список в
Ответ 4
os.system эквивалентна команде Unix system, тогда как подпроцесс был вспомогательным модулем, созданным для обеспечения многих возможностей, предоставляемых командами Popen, более простым и управляемый интерфейс. Они были схожи с командой Unix Popen.
system() executes a command specified in command by calling /bin/sh -c command, and returns after the command has been completed
где as
The popen() function opens a process by creating a pipe, forking, and invoking the shell.
Если вы думаете, какой из них использовать, то используйте подпроцесс определенно, потому что у вас есть все возможности для выполнения, плюс дополнительный контроль над процессом.