在python中,os.execl()和os.execv()有什么区别吗?我用的是
os.execl(python, python, *sys.argv)
重新启动我的脚本(从here)。但它似乎是从上一个脚本离开的地方开始的。
我希望脚本在重新启动时从头开始。这会吗?
os.execv(__file__,sys.argv)
command and idea from here.我从python帮助/文档中找不到它们之间的区别。有没有办法干净利落地重新启动?
有关我正在尝试做的事情的更多背景信息,请参阅my other question
发布于 2015-07-16 15:11:13
在低层,它们做同样的事情:它们用新进程替换正在运行的进程映像。
execv
和execl
之间的only区别在于它们接受参数的方式。execv
需要一个参数列表(第一个参数应该是可执行文件的名称),而execl
需要一个变量参数列表。
因此,在本质上,execv(file, args)
完全等同于execl(file, *args)
。
请注意,sys.argv[0]
已经是脚本名称。但是,这是传递到Python中的脚本名,而可能不是运行程序时使用的实际脚本名。为了正确和安全,传递给exec*
的参数列表应该是
['python', __file__] + sys.argv[1:]
我刚刚用以下代码测试了一个重启脚本:
os.execl(sys.executable, 'python', __file__, *sys.argv[1:])
这个可以很好的工作。请确保您没有忽略或默默地捕获来自execl
的任何错误-如果它不能执行,您最终将“从您停止的地方继续”。
https://stackoverflow.com/questions/31447442
复制相似问题