0

我开始使用 Python 3.3 而不是 2.7,我用来重新启动或关闭程序的一些代码行存在问题。

def restart_program(): 
    python = sys.executable
    os.execl(python, python, * sys.argv)

if __name__ == "__main__":
    answer = input("Restart or close program    ")
    if answer.strip() in "Restart restart".split():
        restart_program()

当我使用它时,我收到以下错误:

Fatal Python error: PyEval_RestoreThread: NULL tstate
Current thread 0x00002030:
File "C:\Python33\lib\os.py", line 531 in execl
File "C:\Users\user\desktop\filename", line 66 in restart_program

第 66 行是

os.execl(python, python, * sys.argv)

我不知道如何解决这个问题,我真的希望有人有解决方案。

如果我像下面的代码那样写一些非常简单的东西,那么它就没有问题了。

import math
import os
import sys

a = input ("enter a")
a = float (a)
b = 12

x = a+b
print (x)

def restart_program(): 
    python = sys.executable
    os.execl(python, python, * sys.argv)

if __name__ == "__main__":
    answer = input("Restart or close the program    ")
    if answer.strip() in ["Restart", "restart"]:
        restart_program()

我想我也可以在这里添加我的整个代码。

http://pastebin.com/fM8s0iiw

4

1 回答 1

1

尝试注释掉Popen电话,看看事情是否清理干净。不过,这确实不是打开文件的好方法,因为它只能在 Windows 上运行,并且只有在您为 png 文件设置了文件关联的情况下。

我敢打赌,Python 3 对于离开孤立流处理程序或其他东西的宽容度不如 2,因此吹走父进程会导致子进程窒息。如果注释掉您的问题,请尝试跟踪您创建的所有孩子并在调用Popen之前明确杀死它们。execl

于 2012-12-13T17:51:43.660 回答