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
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
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.
os.system()
foi suspenso em favor desubprocess
, consulte stackoverflow.com/a/4256153/4212158