首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >python中os.execl()和os.execv()的区别

python中os.execl()和os.execv()的区别
EN

Stack Overflow用户
提问于 2015-07-16 15:05:15
回答 1查看 21.5K关注 0票数 5

在python中,os.execl()和os.execv()有什么区别吗?我用的是

代码语言:javascript
复制
os.execl(python, python, *sys.argv) 

重新启动我的脚本(从here)。但它似乎是从上一个脚本离开的地方开始的。

我希望脚本在重新启动时从头开始。这会吗?

代码语言:javascript
复制
os.execv(__file__,sys.argv)

command and idea from here.我从python帮助/文档中找不到它们之间的区别。有没有办法干净利落地重新启动?

有关我正在尝试做的事情的更多背景信息,请参阅my other question

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-07-16 15:11:13

在低层,它们做同样的事情:它们用新进程替换正在运行的进程映像。

execvexecl之间的only区别在于它们接受参数的方式。execv需要一个参数列表(第一个参数应该是可执行文件的名称),而execl需要一个变量参数列表。

因此,在本质上,execv(file, args)完全等同于execl(file, *args)

请注意,sys.argv[0]已经是脚本名称。但是,这是传递到Python中的脚本名,而可能不是运行程序时使用的实际脚本名。为了正确和安全,传递给exec*的参数列表应该是

代码语言:javascript
复制
['python', __file__] + sys.argv[1:]

我刚刚用以下代码测试了一个重启脚本:

代码语言:javascript
复制
os.execl(sys.executable, 'python', __file__, *sys.argv[1:])

这个可以很好的工作。请确保您没有忽略或默默地捕获来自execl的任何错误-如果它不能执行,您最终将“从您停止的地方继续”。

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31447442

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档