2012-12-13 61 views
0

我開始使用Python 3.3而不是2.7,並且我用一些代碼行來重新啓動或關閉程序。從Python 2.7到3.3之後,代碼不再起作用

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

+1

你有沒有試過? http://docs.python.org/2/library/2to3.html –

+0

Sooooo 66行是什麼? – djechlin

+0

第66行是os.execl(python,python,* sys.argv)。我知道2to3,但我沒有弄清楚如何使用它。我在整個編程業務中都很新。 – user1901162

回答

1

嘗試註釋掉Popen電話,看看東西清理乾淨。這實際上不是打開文件的好方法,因爲它只能在Windows上運行,並且只有在爲png文件設置了文件關聯時纔是如此。

我敢打賭,Python 3對於離開孤立流處理程序或其他東西的寬容度低於2,所以吹掉父進程會導致子進程窒息。如果註釋掉Popen可以消除您的問題,請嘗試跟蹤您創建的所有子項,並在調用execl之前明確地查找它們。

+0

這次只是崩潰。給我一秒鐘,我會得到回溯 – user1901162

+0

回溯(最近呼叫最後): 文件「C:\ Users \ kasutaja \ Desktop \ Eksponentfunktsioon.py」,行68,在 restart_program() 文件「C :\ Users \ kasutaja \ Desktop \ Eksponentfunktsioon.py「,第63行,在restart_program os.execl(*(list(os.path.split(sys.executable))+ sys.argv)) 文件」C:\ Python33 \ lib \ os.py「,行531,在execl execv(file,args) FileNotFoundError:[Errno 2]沒有這樣的文件或目錄 – user1901162

+0

該文檔很難描述這是如何工作後,實際上看在OS代碼模塊...我現在看到你的原稿爲什麼是正確的。這個問題可能是你正在重啓的程序正在做的其他事情。你的程序是多線程的嗎?它使用了什麼其他的庫? –

相關問題