致命的Python错误:无法获取<;的锁_io.BufferedReader名称='&书信电报;stdin>'&燃气轮机;解释器关闭时,可能是由于守护进程线程

致命的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

我想写一个python脚本,如果我没有通过输入命令输入任何值,那么它应该在30秒后为我的变量指定一个默认值,我的平台是Windows7

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
参数编辑了代码。