2 개의 개별 스크립트, Scale1.py
및 Scale2.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
댓글
답변
일반적으로 하위 프로세스 모듈
subprocess.call(["sudo","python","scale1.py"])
명령 줄 호출 용
하위 프로세스 호출 결과를 처리하는 예
result = subprocess.check_output(["sudo","service","mpd","restart"])
하위 프로세스 는 os.system 및 os.spawn 과 같은 여러 이전 모듈 및 함수를 대체합니다. em>. 인수를 삭제하는 데 효과적이므로 쉘 주입 으로부터 사용자를 보호합니다.
https://docs.python.org/2/library/subprocess.html
물론 두 번째 Python 스크립트를 실행하기 위해 CLI 호출이 필요하지 않습니다. 가져올 수 있습니다.
댓글
답변
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가 원하는 것을 수행하는 올바른 방법이며 아마도 허용되는 대답이어야합니다.
os.system()
는subprocess
대신 사용이 중단되었습니다. stackoverflow.com/a/4256153/4212158