Roh*_*mar 4 python restart terminate os.execl
python中的os.execl()和os.execv()有区别吗?我正在使用
os.execl(python, python, *sys.argv)
Run Code Online (Sandbox Code Playgroud)
重新启动我的脚本(从这里)。但它似乎是从上一个脚本离开的地方开始的。
我希望脚本在重新启动时从头开始。这会不会
os.execv(__file__,sys.argv)
Run Code Online (Sandbox Code Playgroud)
做这份工作吗?来自这里的命令和想法。我从 python 帮助/文档中找不到它们之间的区别。有没有办法干净重启?
有关我正在尝试做的事情的更多背景信息,请参阅我的其他问题
在底层,他们做同样的事情:他们用一个新进程替换正在运行的进程映像。
和之间的唯一区别是他们争论的方式。期望一个参数列表(第一个应该是可执行文件的名称),而期望一个可变的参数列表。execv
execl
execv
execl
因此,本质上,execv(file, args)
完全等价于execl(file, *args)
。
请注意,这sys.argv[0]
已经是脚本名称。但是,这是传递给 Python 的脚本名称,可能不是运行程序的实际脚本名称。为了正确和安全,传递给的参数列表exec*
应该是
['python', __file__] + sys.argv[1:]
Run Code Online (Sandbox Code Playgroud)
我刚刚使用以下内容测试了重新启动脚本:
os.execl(sys.executable, 'python', __file__, *sys.argv[1:])
Run Code Online (Sandbox Code Playgroud)
这很好用。确保你没有忽略或默默地捕捉任何错误execl
- 如果它无法执行,你最终会“从你离开的地方继续”。