2012-12-03 3 views
1

일정한 시간 간격으로 이벤트 목록을 포함하는 파일이 있습니다. 나는이 사건의 순서를 재생할 수 있도록하고 싶습니다일정 목록을 일관되게 재생하는 방법

0, Hello World 
0.5, Say Hi 
2, Say Bye 

예를 들면 다음과 같습니다. 첫 번째 열은 두 개의 연속 된 이벤트 사이의 델타입니다 (처음 시작하면 두 번째는 0.5 초 후, 세 번째는 2 초 후 ...)

Windows에서 어떻게 할 수 있습니까? 타이밍에 대해 매우 정확한지 확인할 수있는 것이 있습니까? 아이디어는 음악을 듣는 것과 비슷하지만 오디오 이벤트가 적절한시기에 가깝게 발생하는 것을 원하지는 않습니다.

답변

1

time 모듈의 sleep 기능을 사용하면 쉽게 수행 할 수 있습니다.

import time 

# Change data.txt to the name of your file 
data_file = open("data.txt", "r") 

# Get rid of blank lines (often the last line of the file) 
vals = [i for i in data_file.read().split('\n') if i] 

data_file.close() 

for i in vals: 
    i = i.split(',') 
    i[1] = i[1][1:] 
    time.sleep(float(i[0])) 

    print i[1] 

이 불완전한 알고리즘이지만, 그것은 당신에게이 작업을 수행 할 수있는 방법의 아이디어를 줄 것이다 : 정확한 코드는 다음과 같이 작동합니다. 파일을 읽고 개행 문자로 구분 된 목록으로 분할 한 다음 지정된 초 동안 자고 각 쉼표로 구분 된 쌍을 훑어보고 지정된 문자열을 인쇄합니다.

+0

는 그래, 난 이미이 솔루션을 건너 올하지만 우리는보다 정확한 결과를 얻을 수 있는지 궁금 해서요. Timer api (내가 아는 한) 정확한 시뮬레이션이 정확하지 않습니다. 내 간단한 예제는 실제 응용 프로그램을 현장에서 보여주지 못했지만 Windows에서 사용할 수있는 최고의 정확성이 필요합니다 (즉, Win32 C API를 직접 호출하는 것이 좋습니다) – Dave

+0

그럴 수도 있습니다. print 문은 문자열을 분할하는 것처럼 시간이 오래 걸리기 때문에 필요한 시간이 항상 파일에 지정된 것보다 약간 크기 때문에이 알고리즘은 정확하지 않습니다. 하나의 간단한 솔루션은 애호가 게임 프로그래밍에서 비롯됩니다. 해결 방법은 루프 시작 부분에서 시간을 기록하고 루프가 끝날 때 (잠자기 전에) 시작과 종료 시간의 차이를 가져 와서 잠자기 시간에서 빼십시오. 그러면 훨씬 더 정확한 (기술적으로 불완전하지만) 지연을 줄 수 있습니다. –

1

파이썬에서 time.sleep(...)을 찾고 있습니다.

당신이 목록으로 해당 파일을로드 한 후 값을 인쇄 할 경우

,

import time 

with open("datafile.txt", "r") as infile: 
    lines = infile.read().split('\n') 

    for line in lines: 
     wait, response = line.split(',') 
     time.sleep(float(wait)) 
     print response 
+0

맥스웰 대답에 대한 내 의견보기. 귀하의 솔루션을 잘 작동하지만 내 질문의 정확성 부분에 대해 확실하지. – Dave

+0

그런 경우 최선의 방법은 아마도 함수형 프로그래밍 일 것입니다. 당신이하고있는 일의 일부로 호출 된 함수를 사용하여 완벽한 타이밍을 보장 할 수 있습니다. 함수는 호출 함수가 끝나면 호출됩니다. 'time.sleep' 기간을 수작업으로 줄 필요가 없는지 확인하십시오. 이것이 실제로하는 유일한 길입니다. – jdotjdot

관련 문제