1
我正在寫一個小的單一功能,旨在用一個時間延遲來請求用戶輸入。當時間延遲耗盡時,函數應返回None
而不是用戶的響應,然後應該繼續執行腳本的其餘部分。如何從函數中定義的信號處理函數返回控件?
在當前的實現中,用戶輸入工作,超時工作,超時消息由函數中定義的信號處理函數(我打算讓這個外部函數相當獨立)打印。然而,處理然後暫停(而不是退出在main
函數中定義的while
循環),我不知道爲什麼。
我該如何獲得處理才能繼續?我是否以某種方式濫用signal
?可以使用lambda代替處理函數的顯式定義的函數嗎?
#!/usr/bin/env python
from __future__ import print_function
import signal
import propyte
def main():
response = "yes"
while response is not None:
response = get_input_nonblocking(
prompt = "ohai? ",
timeout = 5
)
print("start non-response procedures")
# do things
def get_input_nonblocking(
prompt = "",
timeout = 5,
message_timeout = "prompt timeout"
):
def timeout_manager(signum, frame):
print(message_timeout)
#signal.signal(signal.SIGALRM, lambda: print(message_timeout))
signal.signal(signal.SIGALRM, timeout_manager)
signal.alarm(timeout)
try:
response = propyte.get_input(prompt)
return response
except:
return None
if __name__ == '__main__':
main()