0

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

4

1 に答える 1

1

呼び出しをコメントアウトして、問題が解決Popenするかどうかを確認してください。ただし、これは Windows でのみ機能し、png ファイルにファイルの関連付けが設定されている場合にのみ機能するため、ファイルを開くにはあまり良い方法ではありません。

Python 3 は、孤立したストリーム ハンドラーなどを残すことについて 2 よりも寛容ではないので、親プロセスを吹き飛ばすと、子プロセスが窒息します。をコメントアウトして問題を解決する場合は、作成したすべての子を追跡し、呼び出しPopenの前にそれらを明示的に削除してみてください。execl

于 2012-12-13T17:51:43.660 に答える