使用自己的解释器,其参数和替换进程重新启动python程序的(略微破坏的)代码是使用os.exec
函数之一,例如os.execl
。
os.execl(path, arg0, arg1, ...)
...
这些函数都执行一个新程序,取代当前进程;他们不回来。在Unix上,新的可执行文件被加载到当前进程中,并且将具有与调用者相同的进程ID。错误将报告为OSError异常。
所以我这样做了:
import os,sys
def restart_program():
"""Restarts the current program, with file objects and descriptors
cleanup
"""
print("restarting")
python = sys.executable
os.execl(python, python, *sys.argv)
restart_program()
我明白了:
C:\Program: can't open file 'Files\Python36\python.exe': [Errno 2] No such file or directory
显然是一个带有空格"该死的路径的情况"。除非它不应该发生,因为我自己并没有编写命令行,而是干净利落地传递了这些论点。
要使其正常工作,因为arg0
(通常)被忽略,我会(例如):
os.execl(python, "python.exe", *sys.argv)
现在该程序正在运行。
所以bug或windows版本"功能" ?