在cpp中执行python文件

问题描述 投票:0回答:1

我想在cpp中执行一个python文件,使其成为一个可以与我的其他子进程通信的进程。但是当我使用

execl("python3", "python3", "python/a1.py");

运行python文件,子进程立即返回,并且我的python文件中没有一行被执行。

但是当我尝试使用

system("python3 python/a1.py");

做同样的事情,它有效。

这是我的问题:

  1. 我真的很想知道为什么第一种方法不起作用

我只是不知道为什么它不能工作,因为我还使用execv加载另一个cpp可执行文件,并且它可以工作,当它进入python文件时,什么也没有发生。

更新: 删除不相关的问题,更正文件名

c++ multiprocessing pipe exec system-calls
1个回答
0
投票

两个问题:

  1. execl
    不会检查
    PATH
    ,因此您需要在第一个参数中指定
    python3
    二进制文件的路径,或者使用
    execlp
    而不是
    execl
  2. 您缺少结束参数列表的
    (char *)NULL
    哨兵。

请注意,user4581301 的注释是错误的,实际上您需要指定

python3
两次才能执行相当于
system("python3 python/a1.py");
的操作,因为第一个用于执行文件,第二个用于
argv[0]

© www.soinside.com 2019 - 2024. All rights reserved.