2013-10-30 2 views
3

예약 된 이벤트에서 호출 한 함수에서 반환 된 값을 가져오고 싶습니다. 다음은 내가하고 싶은 간단한 예제입니다. 심지어예약 된 이벤트에서 파이썬 반환 값

 schedule.enter(2,1,print ret_this,()) 

나 :

import time 
import sched 

schedule = sched.scheduler(time.time, time.sleep) 

def ret_this(): 
    return "This." 

def schedthis(): 
    schedule.enter(2,1,ret_this,()) 
    schedule.run() 
    ## <- print returned value here 

if __name__ == "__main__": 
    schedthis() 

내가 좋아하는 많은 것들을 시도

schedule.enter(2,1,ret = ret_this,()) 
    schedule.run() 
    print ret 


은 어쩌면 몇 가지 배경이 필요합니다.

들어오는 연결을 수신 대기하는 서버를 만들고 싶습니다 (완료되었습니다.). 연결이 설정되면 새 스레드가 생성되고 소켓은 해당 스레드로 구문 분석됩니다. 그 스레드에서 서버로 전송 된 값을 읽고 서버가 클라이언트가 스케줄링하려고하는 것을 판단합니다. 일단 서버가 클라이언트가 원하는 것을 알고 나면 서버는이를 스케줄합니다.

예약 된 이벤트가 완료된 후 (이 응답이 들어오는 곳) 정보를 보려면 이벤트가 끝날 때까지 대기하고 반환 된 값을 클라이언트에 보냅니다.

이벤트가 예약되지 않고 클라이언트가 "완료, 작별 인사"를 받게됩니다. 연결이 닫힙니다.

프로그래밍 신을 부릅니다. 제발 도와주세요.

답변

2

문제는 실제로 간단합니다. ret_this 함수에서 무언가를 반환하지만 아무 데나 놓거나 인쇄하지 않았습니다!

편집

내가 이전에만 게시 된 코드가 스케줄러에 의해 실행 아니에요 기능을 실행하는 밝혀 참조하십시오. scheduler.run은 반환하는 값을 실제로 신경 쓰지 않고 함수 만 실행하기 때문에 실제로 호출 된 시점을 실제로 알기 위해 어딘가에 저장해야합니다. 예를 들어

, 글로벌 변수 :

def ret_this(): 
    global result 
    result = "I'm called!" 

또는 단지는 ret_this에서 인쇄 :

def ret_this(): 
    print "This." 

편집 2
이 파일에 그것을 기록하고 저장하는 또 다른 방법 . 나중에 다시 읽을 수 있습니다 : 실행이 성공적인 인 경우, 파일이 I'm called! 포함됩니다

def ret_this(): 
    with open('output.txt', 'w') as f: 
     f.write('I'm called!') 
if __name__ = "__main__": 
    schedthis() 
    with open("output.txt", 'r') as f: 
     print(f.read()) 

. 그렇지 않으면, 그것은 비어있을 것이다.

희망이 도움이됩니다.

+0

@alKid 답장을 보내 주셔서 감사합니다. 누구든지이 답변을 확인할 수 있습니까? 시도 할 때 없음 값이 인쇄됩니다. ret_this에 의해 반환 된 값을 변경하면 나는 여전히 None 값을받습니다. Python 2.7.4 및 3.3.2에서이 문제를 테스트했습니다.이 질문은 정확한 대답 일 것이므로 어쩌면 설정에서 작동합니다. – Warosaurus

+0

토론을 위해 채팅으로 이동할 수 있습니까? – aIKid

+0

파이썬 2.7로 테스트 중이므로 제대로 작동합니다. 잠시 후에 내 전체 코드를 보여 드리겠습니다. – aIKid