2016-06-10 3 views
0

나는 스크립트를 작성하지 않고 내가 쉘에서 실행할 때,이 값을 인쇄, 출력 올바른 (sudo는 파이썬 /home/pi/map/apps/assistant/IFTTT.py) :실행 파이썬 스크립트에는 출력

def GetCalenderMessages(): 
    print("test") 
    CalenderMessage = bus_service.receive_queue_message('calendar', peek_lock=True) 
    if CalenderMessage != None: 
     message = str(CalenderMessage.body) 
     queuemessage = message.split('|')[1] 
     print(queuemessage) 

     sys.stdout.write(queuemessage) 
     saytts(queuemessage) 
     CalenderMessage.delete() 

On 스위치가있는 인터페이스가 있는데 On을 누르면이 스크립트가 실행되고 작동하지만 위의 스크립트에서 정의한 인쇄 출력을 얻지 못하고 있습니다.

@app_bp.route("/on", methods=["POST"]) 
@opsoroapp.app_api 
def on(): 
    print('test') 
    cmd = "sudo python /home/pi/OnoSW/apps/assistant/IFTTT.py" 
    p = subprocess.Popen(cmd, shell=True, stdout=PIPE, stderr=STDOUT) 
    for line in iter(p.stdout.readline,''): 
     print line 

나는 subprocess.check_output 등처럼 서브 프로세스로 다른 일을 시도했지만 인쇄 된 값을 다시 제공하지 않습니다.

사용하여 파이프의 당신

+0

가 왜는 popen을 통해이 작업을 수행하는 문제 해결 수 있을까? 왜 단순히 스크립트를 가져 와서 함수를 호출 할 수 없습니까? –

+0

함수는'print()','sys.stdout.write()'등을 사용하여 값을 반환해야하고 @DanielRoseman은 다음과 같이 말했습니다 : 모듈을 가져 와서 별도의 프로세스로 실행하는 대신 함수를 호출하십시오. 1-'print ('test')'의 결과를 보시겠습니까? 2-'print >> sys.stderr, "stderr"의 결과를 보시겠습니까? 3-'sudo python'을 실행하기위한 패스워드를 제공해야합니까? 왜 여기서'sudo'가 필요한가요? – jfs

답변

0

1에게) 대신 감사 Popen, 그냥 스크립트를 가져오고 전화 GetCalenderMessages

2) 당신은 그냥 콘솔에 인쇄 또는 웹 애플리케이션 사용자에게 출력 하시겠습니까? 당신의 route 기능에

, 당신은 return 아무것도하지 않는 것 :

이 경우 두 번째 시나리오는 경우입니다. 플라스크 경로가 작동하는 방식을 기억하고, 성공한 결과를 사용자에게 출력 (웹 페이지 형식)하므로 결과를 저장 한 다음 문자열로 반환하거나 HTML 템플릿에 추가해야합니다 그 대신에 render 템플릿. 시도하고 당신이 콘솔에 인쇄 할 경우에

See more

, 1)

+0

옵션 1은 옵션이 아닙니다. 옵션 2에서는 이번에 출력을 리턴했지만 아무것도하지 않습니다. 나는 내 문제를 보여 주겠다. 쉘에서이 명령을 실행하면 'sudo python IFTTT.py ill : http : //i.imgur.com/iqiNZRT.png 플라스크 웹 서버에서 실행할 때 얻을 수있다. http : http : //i.imgur.com/HZzyXpI.png, 파이썬 2.7을 사용하기 때문에 첫 번째 오류를 보지 마십시오 – Mat

+0

왜 sudo를 사용하고 있습니까? 모든 응용 프로그램에 루트 권한이 필요하다는 것은 매우 드뭅니다. –

+1

터미널에서 'sudo'명령을 실행하면 Unix/Linux에서 암호를 묻습니다. pOpen을 통해 'sudo'를 수행 할 때 - 여전히 비밀번호가 필요합니다 - 그리고 그 비밀번호를 줄 때까지 실행되지 않습니다. 질문 된 질문은 유효합니다 - 왜 당신은'sudo '를 사용하고 왜 다른 프로세스를 만들고 있습니까? 당신은해야한다고 주장하지만 - 왜 우리가 당신을 도우려는 것이 어려울 지 이해하지 못한다면. –