当前位置: 首页 > 面试题库 >

使用os.execlp时,为什么`python`需要`python`作为argv [0]

华凌
2023-03-14
问题内容

代码是这样的:

os.execlp('python', 'python', 'child.py', #other args#)  # this works

os.execlp('python', 'child.py', #other args#)  # this doesn't work

但是我还是很困惑。答案说:

第一个参数是要执行的程序(位于PATH上)。其余的是程序的sys.argv参数。

但是,如果我运行:python child.py 1 2 3并且sys.argv此过程的将会是["child.py", "1", "2", "3"],其中python不存在。那为什么要添加python作为的第二个参数os.execlp呢?


问题答案:

执行python时,它将sys.argv为您创建。该列表中的值是 基于 操作系统传递给它的参数的,但它
sys.executable将该列表中的值 保留下来

换句话说,当调用Python时,它将设置sys.argv除其自己的可执行文件之外的所有内容

当通过调用 新的
可执行文件时os.execlp(),您仍然需要包含Python,因为这是操作系统将运行的可执行文件。os.execlp()无论sys.argv以后如何查找,仍然需要传递通行证的前两个值。



 类似资料:
  • 问题内容: 我从节点启动这是来自node.js README.md 先决条件(仅Unix): 想知道为什么node.js需要Python?它是否在其API下使用Python 问题答案: Node.js使用GYP构建-GYP —用Python编写的跨平台构建工具。Python中还实现了其他一些构建步骤。因此,从源代码构建节点需要Python。 但是您还需要Python来构建本机插件。

  • 当我阅读mapstruct文档时,他们说:mapstruct是一个Java注释处理器,用于生成类型安全的bean映射类。 https://mapstruct.org/documentation/stable/reference/html/#introduction 这就剩下我的任务了。为什么我需要mapstruct?Jhipster使用它,我不知道他们为什么首先需要它?为什么你需要Jhipster

  • 问题内容: 我有一个将对象保存到数据库的EJB。在我看到的一个示例中,一旦保存了此数据(EntityManager.persist),就会调用EntityManager.flush();。为什么我需要这样做?我要保存的对象未附加,以后在该方法中也不会使用。实际上,一旦保存,该方法就会返回,并且我希望资源会被释放。(示例代码也在remove调用上执行此操作。) 问题答案: 调用将强制数据立即被持久保

  • 问题内容: 我一直在使用pickle感到非常高兴,然后我看到了这篇文章:不要为您的数据腌制 进一步阅读似乎是: 泡菜慢 泡菜不安全 泡菜不是人类可读的 泡菜不是与语言无关的 我已将数据保存为JSON,但我想了解最佳做法: 考虑到所有这些问题,您何时会使用泡菜?需要使用哪种特定情况? 问题答案: Pickle是不安全的,因为它通过调用任意函数来构造任意Python对象。但是,这也使它可以序列化几乎所

  • 问题内容: 为什么要在上使用pip?难道不是PyPI和程序包作者最主要的原因吗?如果作者将废话源tarball(例如:丢失的文件,没有)上传到PyPI,则pip和都会失败。除了外观上的差异外,为什么Python的人(如上述推文中)似乎强烈青睐pip而不是? (假设我们正在谈论由社区维护的Distribute软件包中的) 问题答案: 这里的许多答案在2015年已经过时了(尽管丹尼尔·罗斯曼最初接受的

  • 本文向大家介绍python 为什么说eval要慎用,包括了python 为什么说eval要慎用的使用技巧和注意事项,需要的朋友参考一下 eval前言 当内存中的内置模块含有os的话,eval同样可以做到命令执行: 当然,eval只能执行Python的表达式类型的代码,不能直接用它进行import操作,但exec可以。如果非要使用eval进行import,则使用__import__: 在实际的代码中