Подтвердить что ты не робот

Разница между подпроцессом .Popen и os.system

В чем разница между subprocess.Popen() и os.system()?

4b9b3361

Ответ 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.

Если вы думаете, какой из них использовать, то используйте подпроцесс определенно, потому что у вас есть все возможности для выполнения, плюс дополнительный контроль над процессом.