开发者社区> 问答> 正文

我在使用python 3运行os.execl()时遇到问题

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

展开
收起
is大龙 2020-03-24 20:28:08 1702 0
1 条回答
写回答
取消 提交回答
  • 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模块来执行其他程序,而不是直接使用forkexec。这提供了更高级别的抽象以实现I / O重定向,等待子进程等。

    回答来源:stackoverflow

    2020-03-24 20:28:15
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
开放算力·云启未来 立即下载
2022龙蜥操作系统生态用户实践精选 立即下载
冬季实战营第二期:Linux操作系统实战入门 立即下载