如何在 Linux 中从 C 执行 Python 程序

How to execute a Python program from C in Linux

我正在使用 Raspberry Pi,我需要能够在我的 C 程序完成 运行 函数后执行 python 程序。我一直在尝试使用 fork 和 exec,但是,当我使用 "python3" 作为 exec 函数的第一个参数时,我得到的只是控制台中的 python 命令提示符。

回答问题:

OP 使用 execlp 或类似形式,形式为:

execlp("python3", "name_of_script.py", (char*)0);

(或者如果他们不知道 the issue with NULL,他们可能已经通过了 NULL 而不是 (char*)0)。

问题是,execlp usually needs the first argument to be passed twice;第二次是将值设置为 argv[0],而用户提供的参数几乎总是在 argv[1] 和更高版本中检查(argv[0] 中的值很少使用,当它是,它主要用于 usage/debug 输出)。当 python3 看到它自己的 argv 时,它看到它是用 name_of_script.py 的 "name" 调用的,但它不认为它是真正的 "argument" , 所以它的行为就好像它是在没有参数的情况下启动的,这导致了交互式解释器。

修复方法是两次传递程序名称,一次是为了查找程序,一次是在 argv 中设置它,因此参数被 python3 识别为要调用的脚本:

execlp("python3", "python3", "name_of_script.py", (char*)0);
//        ^ program to find
//                    ^ name to set in argv[0]
//                                  ^ script name to put in argv[1] so script is run