Я не могу понять, как избежать EOFError на второй итерации цикла while сразу после запроса raw_input. Мне нужно, чтобы этот цикл выполнялся 30 раз и в идеале не имел бы блок try-except, который загружал бы меня из программы. Любая помощь будет оценена! `Python EOFError во время цикла при использовании raw_input
import sys
import pyaudio
import wave
import os
import fcntl
import time
def main():
sound_cues = open('sound_cues').read().splitlines()
light_cues = open('light_cues').read().splitlines()
play_names = open('play_names').read().splitlines()
plays = []
for idx in range(len(play_names)):
plays.append({'name': play_names[idx], 'sound': sound_cues[idx], 'lights': light_cues[idx]})
while(True):
play_num = raw_input("Enter a play number: ")
play = plays[int(play_num) - 1]
print
print 'lights:'
print play['lights']
print
raw_input("Press Enter to start sound...")
print
print 'sound:'
print play['sound']
audio = "sounds/" + play['sound']
wf = wave.open(audio)
p = pyaudio.PyAudio()
stream = p.open(format=p.get_format_from_width(wf.getsampwidth()),
channels = wf.getnchannels(),
rate = wf.getframerate(),
output=True)
data = wf.readframes(1024)
fl = fcntl.fcntl(sys.stdin.fileno(), fcntl.F_GETFL)
fcntl.fcntl(sys.stdin.fileno(), fcntl.F_SETFL, fl | os.O_NONBLOCK)
print
print "Press Enter to stop audio..."
print
while data != '':
try:
stdin = sys.stdin.read()
if "\n" in stdin or "\r" in stdin:
break
except IOError:
pass
stream.write(data)
data = wf.readframes(1024)
if __name__ == "__main__":
main()
`
выход `
Enter a play number: 2
lights:
Black out, clamp light works as spot, follows Kris
Press Enter to start sound...
sound:
1.wav
Press Enter to stop audio...
Enter a play number: Traceback (most recent call last):
File "30plays_1.py", line 56, in <module>
main()
File "30plays_1.py", line 18, in main
play_num = raw_input("Enter a play number: ")
EOFError
`
Вы смешиваете использование 'sys.stdin.read()' и 'raw_input'. Я предполагаю, что после 'read()', 'stdin' станет пустым, а' raw_input' выбрасывает EOFError. – 2014-09-17 07:37:47