致命的Python错误:无法获取<;的锁_io.BufferedReader名称='&书信电报;stdin>'&燃气轮机;解释器关闭时,可能是由于守护进程线程
我想写一个python脚本,如果我没有通过输入命令输入任何值,那么它应该在30秒后为我的变量指定一个默认值,我的平台是Windows7致命的Python错误:无法获取<;的锁_io.BufferedReader名称='&书信电报;stdin>'&燃气轮机;解释器关闭时,可能是由于守护进程线程,python,Python,我想写一个python脚本,如果我没有通过输入命令输入任何值,那么它应该在30秒后为我的变量指定一个默认值,我的平台是Windows7 from func_timeout import func_timeout, FunctionTimedOut def doit(): value = input("enter") try: doitReturnValue = func_timeout(5, doit) except FunctionTimedOut: value
from func_timeout import func_timeout, FunctionTimedOut
def doit():
value = input("enter")
try:
doitReturnValue = func_timeout(5, doit)
except FunctionTimedOut:
value = "default value"
这就是我得到的错误:
"C:\Users\Arpit\PycharmProjects\Complete Test\venv\Scripts\python.exe" "C:/Users/Arpit/PycharmProjects/Complete Test/test_for_timeout.py"
enterFatal Python error: could not acquire lock for <_io.BufferedReader name='<stdin>'> at interpreter shutdown, possibly due to daemon threads
Python runtime state: finalizing (tstate=00000000003CAE20)
Thread 0x00000c18 (most recent call first):
File "C:\Users\Arpit\AppData\Local\Programs\Python\Python38\lib\threading.py", line 1027 in _wait_for_tstate_lock
File "C:\Users\Arpit\AppData\Local\Programs\Python\Python38\lib\threading.py", line 1015 in join
File "C:\Users\Arpit\PycharmProjects\Complete Test\venv\lib\site-packages\func_timeout\StoppableThread.py", line 126 in run
File "C:\Users\Arpit\AppData\Local\Programs\Python\Python38\lib\threading.py", line 932 in _bootstrap_inner
File "C:\Users\Arpit\AppData\Local\Programs\Python\Python38\lib\threading.py", line 890 in _bootstrap
Thread 0x0000106c (most recent call first):
File "C:/Users/Arpit/PycharmProjects/Complete Test/test_for_timeout.py", line 7 in doit
File "C:\Users\Arpit\PycharmProjects\Complete Test\venv\lib\site-packages\func_timeout\dafunc.py", line 68 in funcwrap
File "C:\Users\Arpit\AppData\Local\Programs\Python\Python38\lib\threading.py", line 870 in run
File "C:\Users\Arpit\AppData\Local\Programs\Python\Python38\lib\threading.py", line 932 in _bootstrap_inner
File "C:\Users\Arpit\AppData\Local\Programs\Python\Python38\lib\threading.py", line 890 in _bootstrap
Current thread 0x00001850 (most recent call first):
<no Python frame>
Process finished with exit code 3
“C:\Users\arbit\PycharmProjects\Complete Test\venv\Scripts\python.exe”“C:/Users/arbit/PycharmProjects/Complete Test/Test\u for_timeout.py”
enterFatal Python错误:在解释器关闭时无法获取的锁,可能是由于守护进程线程
Python运行时状态:正在完成(tstate=0000000000 3CAE20)
线程0x00000c18(最新调用优先):
文件“C:\Users\arbit\AppData\Local\Programs\Python\Python38\lib\threading.py”,第1027行,在等待状态锁定
文件“C:\Users\arbit\AppData\Local\Programs\Python\Python38\lib\threading.py”,join中的第1015行
文件“C:\Users\arbit\PycharmProjects\Complete Test\venv\lib\site packages\func\u timeout\StoppableThread.py”,运行中的第126行
文件“C:\Users\arbit\AppData\Local\Programs\Python\Python38\lib\threading.py”,在_bootstrap\u inner中的第932行
文件“C:\Users\arbit\AppData\Local\Programs\Python\Python38\lib\threading.py”,在\u bootstrap中的第890行
线程0x0000106c(最新调用优先):
文件“C:/Users/arbit/PycharmProjects/Complete Test/Test_for_timeout.py”,doit中的第7行
文件“C:\Users\arbit\PycharmProjects\Complete Test\venv\lib\site packages\func\u timeout\dafunc.py”,funcwrap中的第68行
文件“C:\Users\arbit\AppData\Local\Programs\Python\Python38\lib\threading.py”,运行中第870行
文件“C:\Users\arbit\AppData\Local\Programs\Python\Python38\lib\threading.py”,在_bootstrap\u inner中的第932行
文件“C:\Users\arbit\AppData\Local\Programs\Python\Python38\lib\threading.py”,在\u bootstrap中的第890行
当前线程0x00001850(最新调用优先):
进程已完成,退出代码为3
如果您没有任何限制,请尝试该软件包
有一个异步包,它允许在异步执行其他任务时等待用户输入
要安装此软件包,请运行:pip install aioconsole
以下代码将等待30秒,等待用户输入。如果用户此时没有输入任何内容,它将继续(raiseasyncio.TimeoutError
)并将该值设置为默认值
import asyncio
import aioconsole
async def main(main_loop):
t = main_loop.create_task(aioconsole.ainput())
try:
await asyncio.wait_for(t, timeout=30)
value = t.result()
except asyncio.TimeoutError as _:
value = "default value"
print(value)
return value
if __name__ == '__main__':
l = asyncio.get_event_loop()
value = l.run_until_complete(main(l))
l.close()
关于您的代码,我已经尝试过了,但做了一些小改动:
from func_timeout import func_timeout, FunctionTimedOut
def doit():
value = input("enter")
return value # Need to return the value.
try:
value = func_timeout(5, doit) # Set the return value to the same variable name
except FunctionTimedOut as _:
value = "default value"
print(value)
这是否解决了您的问题:回溯(最近一次调用):文件“C:/Users/arbit/PycharmProjects/Complete Test/Test.py”,第7行,在i,o,e=select.select([sys.stdin],],[],[],30)OSError:[WinError 10038]尝试对非socketThanks的对象执行操作,第一个代码对我有效,但第二个代码显示了这个错误:致命的Python错误:在解释器关闭时无法获取锁,可能是由于守护进程线程Python运行时状态:finalizing(tstate=0000000000 45AF50)我的平台是windows 7,我建议使用第一个方法(代码)因为它使用内置的
python3
函数/能力。关于秒代码,请尝试阅读它可能会对您有所帮助。您能否告诉我如何在此函数之外调用“value”变量:“async def main(main_循环):”我使用如何从main
函数返回value
参数编辑了代码。