在cpp中执行python文件

Execute python file in cpp

提问人:Brian 提问时间:10/25/2023 最后编辑:Brian 更新时间:10/27/2023 访问量:50

问:

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

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

要运行 Python 文件,子进程会立即返回,并且不会执行我的 Python 文件中的任何一行。

但是当我尝试使用

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

做同样的事情,它有效。

这是我的问题:

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

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

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

C++ 多处理 管道 exec 系统调用

评论

0赞 user4581301 10/25/2023
execl("python3", "python3", "python/a1.py");看起来你想运行一个程序,就好像命令行是 一样。即使忽略 python 脚本名称的差异,这与确实有效的命令也明显不同。首先丢弃其中一个参数,看看会发生什么。python3 python3 python/a1.pypython3 python/ece650-a1.py"python3"execl
1赞 user4581301 10/25/2023
我建议从这个问题中删除问题 2。每个问题都应该问一个问题,但如果问题密切相关,或者一个问题的答案意味着另一个问题的答案,有时会扔一根骨头。这里的情况并非如此,因为这两个问题之间没有关系。事实上,第二个问题似乎是一个cmake问题,与C++编程无关。

答:

0赞 Joseph Sible-Reinstate Monica 10/27/2023 #1

两个问题:

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

请注意,user4581301 的注释是错误的,您实际上需要指定两次才能执行等效的 ,因为第一个是用于执行的文件,第二个是用于 。python3system("python3 python/a1.py");argv[0]