我在 运行 os.execl() 和 python 3 时遇到问题
I'm having trouble running os.execl() with python 3
import os
import sys
pid = os.fork()
print ("second test")
if pid == 0:
print ("this is the child")
print ("I'm going to exec another program now")
os.execl("python", "test.py", * sys.argv)
else:
print ("the child is pid %d" % pid)
os.wait()
我到处都在看例子,但就我的生活而言,我就是无法理解。我认为这可行,但我收到此错误:
Traceback (most recent call last):
File "main.py", line 9, in <module>
os.execl("python", "test.py", * sys.argv)
File "/usr/local/lib/python3.8/os.py", line 534, in execl
execv(file, args)
FileNotFoundError: [Errno 2] No such file or directory
os.execl()
的第一个参数应该是您想要 运行 的可执行文件的路径。它不会使用 $PATH
.
搜索它
您还需要将程序名称重复为 arg0
。
os.execl('/usr/local/bin/python', 'python', "test.py", *sys.argv)
您可以使用os.execlp()
来使用$PATH
自动查找程序。
os.execlp('python', 'python', "test.py", *sys.argv)
顺便说一句,sys.argv[0]
将是原始 Python 脚本的名称。在将参数传递给另一个脚本时,您可能希望删除它,因此您可以使用 *sys.argv[1:]
.
当然,大多数人使用subprocess
模块来执行其他程序,而不是直接使用fork
和exec
。这提供了更高级别的抽象来实现 I/O 重定向、等待子进程等
import os
import sys
pid = os.fork()
print ("second test")
if pid == 0:
print ("this is the child")
print ("I'm going to exec another program now")
os.execl("python", "test.py", * sys.argv)
else:
print ("the child is pid %d" % pid)
os.wait()
我到处都在看例子,但就我的生活而言,我就是无法理解。我认为这可行,但我收到此错误:
Traceback (most recent call last):
File "main.py", line 9, in <module>
os.execl("python", "test.py", * sys.argv)
File "/usr/local/lib/python3.8/os.py", line 534, in execl
execv(file, args)
FileNotFoundError: [Errno 2] No such file or directory
os.execl()
的第一个参数应该是您想要 运行 的可执行文件的路径。它不会使用 $PATH
.
您还需要将程序名称重复为 arg0
。
os.execl('/usr/local/bin/python', 'python', "test.py", *sys.argv)
您可以使用os.execlp()
来使用$PATH
自动查找程序。
os.execlp('python', 'python', "test.py", *sys.argv)
顺便说一句,sys.argv[0]
将是原始 Python 脚本的名称。在将参数传递给另一个脚本时,您可能希望删除它,因此您可以使用 *sys.argv[1:]
.
当然,大多数人使用subprocess
模块来执行其他程序,而不是直接使用fork
和exec
。这提供了更高级别的抽象来实现 I/O 重定向、等待子进程等