Como executo um comando de linha de comando em um script Python?

Estou usando 2 scripts separados, Scale1.py e Scale2.py. Para executá-los, eu insiro sudo python Scale1.py ou sudo python Scale2.py na linha de comando do terminal. Gostaria de ter uma linha no Scale2.py script no qual se eu pressionar um botão, o programa é interrompido e executa Scale1.py. Algo assim, que não funciona.

 if GPIO.input(23) == False: break(sudo python Scale1.py)  

Resposta

os.system("sudo python scale1.py")

primeiro, você precisará importar o módulo de sistema operacional

import os

Eu não tenho um pi comigo para testar, mas isso vem da segunda resposta a esta pergunta: https://stackoverflow.com/questions/89228/calling-an-external-command-in-python

Comentários

  • Isso é o que eu tentei e funcionou, muito obrigado Harry! Mas Tive que combinar os dois programas primeiro. Agora o os.system (" sudo python Scale3.py ") simplesmente reinicia no início do programa Scale3.py, que é bom. Acho que importar Scale3.py também funcionará. Não ' tentei o subprocesso, parece interessante e é provavelmente algo que preciso aprender .
  • os.system() foi suspenso em favor de subprocess, consulte stackoverflow.com/a/4256153/4212158

Resposta

Em geral, use o subprocesso módulo

subprocess.call(["sudo","python","scale1.py"]) 

para chamadas de linha de comando.

Um exemplo de processamento do resultado de uma chamada de subprocesso;

 result = subprocess.check_output(["sudo","service","mpd","restart"]) 

O subprocesso substitui vários módulos e funções mais antigos, como os.system e os.spawn . Ele faz um bom trabalho na limpeza de argumentos, portanto, protege você de injeção de shell .

https://docs.python.org/2/library/subprocess.html

Claro, para executar um segundo script Python, não há necessidade de chamada CLI, você pode importá-los.

Comentários

  • Eu ' estou tentando aprender como emitir comandos a partir de um script Python (consulte aqui e aqui ) e tendo alguns problemas. Eu me pergunto se subprocess pode ser melhor no meu caso também.

Resposta

Você pode usar sudo como sugerido por harry sib, mas terá que adicionar o usuário que executa o primeiro script ao arquivo sudoers .

A melhor maneira de executar um script Python a partir de outro script Python é importá-lo. Você deve ter a lógica do seu script em um método no segundo script:

 # Scale2.py def run(): do_first() do_second() [...] # Run it only if called from the command line if __name__ == "__main__": run() 
 # Scale1.py import Scale2 if (GPIO.input(23) == False): Scale2.run() 

Comentários

  • +1, já que python é capaz disso, será a cleanest resposta.
  • +1 , esta é a maneira correta de fazer o que o OP deseja e provavelmente deve ser a resposta aceita.

Deixe uma resposta

O seu endereço de email não será publicado. Campos obrigatórios marcados com *