我在Linux上用python和pygame编写了一个程序。我的问题是,当我调用我的函数在调制解调器上拨出然后发送消息时,程序会暂停,直到函数完成。我需要一种方法subprocess
或线程函数。我是python和pygame的新手,所以这可能很简单,但我尝试过的一切都失败了。
另外,我确信可能有一种更优雅的方式来处理声音和暂停。第一个sleep
给出了调制解调器的时间。接下来的两个是在单词和句子之间自然发出声音暂停,最后一个是让整个脚本有时间在调制解调器挂起之前发送消息。
我正在调用函数并传递这样的变量:
A = 'Electronic_Chime.mp3'
B = 'please_check.mp3'
C = 'three.mp3'
contact_user(A,B,C)
这就是功能:
def contact_user( A, B, C ):
ser.write("ATDT441\r") # Attention - Dial via tone number
time.sleep(6)
pygame.mixer.music.load(A)
pygame.mixer.music.play()
time.sleep(2)
pygame.mixer.music.load(B)
pygame.mixer.music.play(1)
time.sleep(2)
pygame.mixer.music.load(C)
pygame.mixer.music.queue(C)
pygame.mixer.music.play()
time.sleep(10)
任何想法或建议都将受到赞赏。
PS。我试过了:
thread1 = threading.Thread(contact_user(A,B,C))
thread1.start()
即使我有线程contact_user(A,B,C)
,该程序似乎表现完全相同。
答案 0 :(得分:1)
我的主要问题是我没有正确地将我的论点传递给我的帖子。以下是适合我的代码。
我的功能:
def contact_user(A,B,C):
ser.write("ATDT411\r") # Attention - Dial Tone 411
time.sleep(5) # Wait for modem to finish dialing
pygame.mixer.music.load(A)
pygame.mixer.music.play() # Play attention chime
time.sleep(2) # Wait long enough for first message chime to play before moving on
pygame.mixer.music.load(B)
pygame.mixer.music.play(1) # Play next message
time.sleep(2) # Wait long enough for second message to play before moving on
pygame.mixer.music.load(C) # Load last message
pygame.mixer.music.queue(C) # Queue second instance of last message
pygame.mixer.music.play() # Play last message twice
time.sleep(10) # Wait long enough for last message to play
ser.write("ATH\r") # Attention - Hang up line
ser.write("ATZ\r") # Attention - Reset modem
ser.close()
从主程序调用函数:
t = threading.Thread(name = 'dial', target = contact_user, args = (A,B,C))
t.start()
感谢所有帮助我的人。非常感谢。