Python 스크립트에서 명령 줄 명령을 어떻게 실행합니까?

2 개의 개별 스크립트, Scale1.pyScale2.py. 실행하려면 터미널 명령 줄에서 sudo python Scale1.py 또는 sudo python Scale2.py를 입력합니다. Scale2.py 스크립트에서 버튼을 누르면 프로그램이 중단되고 Scale1.py가 실행됩니다. 이와 같은 것은 작동하지 않습니다.

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

답변

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

먼저 os 모듈을 가져와야합니다.

import os

테스트 할 ATM이 없지만이 질문에 대한 두 번째 답변 인 https://stackoverflow.com/questions/89228/calling-an-external-command-in-python

댓글

  • 이것은 제가 시도한 것이며 효과가있었습니다. Harry 감사합니다!하지만 먼저 두 프로그램을 결합해야했습니다. 이제 os.system (" sudo python Scale3.py ")가 처음에 다시 시작됩니다. Scale3.py 프로그램의 일부입니다. import Scale3.py도 작동 할 것이라고 생각합니다. 하위 프로세스를 시도하지 않았으며 ' ' 재미있게 보였으며 아마도 배워야 할 것입니다. .
  • os.system()subprocess 대신 사용이 중단되었습니다. stackoverflow.com/a/4256153/4212158

답변

일반적으로 하위 프로세스 모듈

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

명령 줄 호출 용

하위 프로세스 호출 결과를 처리하는 예

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

하위 프로세스 os.system os.spawn . 인수를 삭제하는 데 효과적이므로 쉘 주입 으로부터 사용자를 보호합니다.

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

물론 두 번째 Python 스크립트를 실행하기 위해 CLI 호출이 필요하지 않습니다. 가져올 수 있습니다.

댓글

  • ' Python 스크립트 내에서 명령을 실행하는 방법을 배우려고합니다 ( 참조). 여기 여기 )와 몇 가지 문제가 있습니다. subprocess가 제 경우에도 더 좋을지 궁금합니다.

답변

harry sib이 제안한대로 sudo를 사용할 수 있지만 첫 번째 스크립트를 실행하는 사용자를 sudoers 파일 에 추가해야합니다.

다른 Python 스크립트에서 Python 스크립트를 실행하는 가장 좋은 방법은 가져 오는 것입니다. 두 번째 스크립트의 메소드에 스크립트 로직이 있어야합니다.

 # 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() 

댓글

  • +1, python은이를 수행 할 수 있으므로 cleanest 답변이됩니다.
  • +1 , 이것은 OP가 원하는 것을 수행하는 올바른 방법이며 아마도 허용되는 대답이어야합니다.

답글 남기기

이메일 주소를 발행하지 않을 것입니다. 필수 항목은 *(으)로 표시합니다