Qual é a diferença entre subprocess.Popen()
e os.system()
?
python
subprocess
system
Arovit
fonte
fonte
sts = p.wait()
vez da última linha.shell=True
se puder. Ter essa opção é um dos benefícios desubprocess.Popen()
e suas funções auxiliares.os.system
esubprocess.call/popen/run
faz bloco / espera para o comando ao fim: stackoverflow.com/a/14059648/4752883subprocess.Popen()
é um superconjunto estrito deos.system()
.fonte
os.system
equivale aosystem
comando Unix , enquantosubprocess
foi um módulo auxiliar criado para fornecer muitas das facilidades fornecidas pelosPopen
comandos com uma interface mais fácil e controlável. Eles foram projetados de forma semelhante ao comando Unix Popen .Enquanto que:
Se você está pensando em qual usar, use
subprocess
definitivamente porque você tem todas as facilidades para execução, além de controle adicional sobre o processo.fonte
O subprocesso é baseado no popen2 e, como tal, tem uma série de vantagens - há uma lista completa no PEP aqui , mas algumas são:
fonte
Ao executar o python (cpython) no Windows, o sistema
<built-in function system>
os.system será executado sob as cortinas _wsystem, enquanto se você estiver usando um sistema operacional diferente do Windows, ele usará o sistema .Ao contrário, Popen deve usar CreateProcess no windows e _posixsubprocess.fork_exec em sistemas operacionais baseados em posix.
Dito isso, um conselho importante vem da documentação do os.system , que diz:
fonte