В чем разница между subprocess.Popen()
и os.system()
?
python
subprocess
system
Аровит
источник
источник
sts = p.wait()
вместо последней строки.shell=True
если вы можете. Наличие этой опции - одно из преимуществsubprocess.Popen()
и вспомогательных функций.os.system
иsubprocess.call/popen/run
блокируют / ждут завершения команды: stackoverflow.com/a/14059648/4752883subprocess.Popen()
строгий супер-наборos.system()
.источник
os.system
эквивалентенsystem
команде Unix , аsubprocess
был вспомогательным модулем, созданным для обеспечения многих возможностей, предоставляемыхPopen
командами, с более простым и управляемым интерфейсом. Они были разработаны аналогично команде Unix Popen .В то время как:
Если вы думаете, какой из них использовать,
subprocess
определенно используйте, потому что у вас есть все возможности для выполнения, а также дополнительный контроль над процессом.источник
Подпроцесс основан на popen2 и, как таковой, имеет ряд преимуществ - здесь есть полный список в PEP , но некоторые из них:
источник
При запуске python (cpython) в Windows система
<built-in function system>
os.system будет выполняться под занавесками _wsystem, а если вы используете ОС, отличную от Windows, она будет использовать system .Напротив, Popen должен использовать CreateProcess в Windows и _posixsubprocess.fork_exec в операционных системах на основе posix.
Тем не менее, важный совет исходит из документации os.system , в которой говорится:
источник