为什么在使用 execl() 时会出现 "execv(file, args)" 错误?

Why am I getting an "execv(file, args)" error when using execl()?

我正在尝试使用 execl() 来执行一个新程序,但它一直返回一个 execv() 错误,指出 arg2 不能为空。

if pid == 0:
    print("This is a child process")
    print("Using exec to another program")
    os.execl("example_prg_02.py")

为什么使用execl()会出现这种情况? execl() 也需要参数吗?

"example_prg_02.py" 不是可执行文件的路径,您必须指定

  • 可执行文件的路径作为第一个参数,
  • 第二个可执行文件的名称,
  • 第 3 个参数(第 4、5、...)

所以不是你的

os.execl("example_prg_02.py")

使用

os.execl(sys.executable, "python", "example_prg_02.py")

(当然是第一个 import sys)。

sys.executable 是 Python 解释器的可执行二进制文件的绝对路径。


附录(来自我的评论):

Why error from execv(), when I used execl()?

execv()execl() 做同样的事情,它们在传递命令行参数的方式上有所不同:

  • 如果最后一个字母是 vv参数数量可变),您必须提供 list or tuple for argv (i.e. arguments),

  • 如果最后一个字母是l(大概意思是list them — 对于 常量 个数),您必须提供 argv 作为 单个参数 .

execl()只是一个“语法糖”——它在内部调用execv(),所以你得到了execv()的错误。