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
问题来源:stackoverflow
os.execl()的第一个参数应该是您要运行的可执行文件的路径。它不会使用$ PATH
搜索它。
您还需要将程序名称重复为arg0。
os.execl('/usr/local/bin/python', 'python', "test.py", \*ys.argv)
您可以使用os.execlp()使用$ PATH自动查找程序。
os.execlp('python', 'python', "test.py", \*ys.argv)
顺便说一句,sys.argv [0]将是原始Python脚本的名称。您可能希望在将参数传递给另一个脚本时将其删除,因此可以使用* ys.argv [1:]
。
当然,大多数人使用subprocess
模块来执行其他程序,而不是直接使用fork
和exec
。这提供了更高级别的抽象以实现I / O重定向,等待子进程等。
回答来源:stackoverflow
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。