파이썬 스크립트에서 명령 행 명령을 어떻게 실행합니까?


16

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)

답변:


24

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

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

import os

나는 atm과 함께 테스트 할 파이가 없지만 이것은이 질문에 대한 두 번째 답변에서 나옵니다 : https : //.com/questions/89228/calling-an-external-command-in-python


이것은 내가 시도한 것이며 효과가 있습니다. 해리 덕분에! 그러나 두 프로그램을 먼저 결합해야했습니다. 이제 os.system ( "sudo python Scale3.py")은 Scale3.py 프로그램의 시작 부분에서 다시 시작하기 만하면됩니다. 수입 Scale3.py도 효과가 있다고 생각합니다. 나는 서브 프로세스를 시도하지 않았으며, 흥미로워 보였으며 아마도 내가 알아야 할 것입니다.
Rico

os.system()찬성하여 subprocess
deprecated

12

일반적으로 서브 프로세스 모듈을 사용하십시오.

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

커맨드 라인 호출.

서브 프로세스 호출의 결과를 처리하는 예제;

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

하위 프로세스 는 다음과 같은 몇 가지 이전 모듈 및 기능을 대체합니다. os.systemos.spawn 과 . 인수를 살균하는 데 효과적이므로 쉘 주입 으로부터 보호합니다 .

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

물론 두 번째 파이썬 스크립트를 실행하기 위해 CLI 호출이 필요하지 않습니다.


파이썬 스크립트 ( herehere 참조)에서 명령을 실행 하고 몇 가지 문제 가있는 방법을 배우려고합니다 . subprocess내 경우에도 더 좋을지 궁금합니다 .
uhoh

6

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

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

# Scale2.py
데프 실행 () :
    do_first ()
    do_second ()
    [...]

# 커맨드 라인에서 호출 된 경우에만 실행
__name__ == '__main__'인 경우 :
    운영()
# Scale1.py
수입품 Scale2

(GPIO.input (23) == False) 인 경우 :
    Scale2.run ()

2
+1, 파이썬이 이것을 할 수 있기 때문에 cleanest답 이 될 것입니다.
LuWi

1
+1, 이것은 OP가 원하는 것을 수행하는 올바른 방법이며 아마도 대답이 될 것입니다.
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.