Как выполнить программу на Python из C в Linux - PullRequest
0 голосов
/ 11 сентября 2018

Я использую Raspberry Pi, и мне нужно иметь возможность выполнить программу на Python, как только моя C-программа завершит выполнение функции.Я пытался использовать fork и exec, однако, когда я использую «python3» в качестве первого параметра для функции exec, все, что я получаю, это командная строка python в консоли.

1 Ответ

0 голосов
/ 11 сентября 2018

Чтобы ответить на проблему , как определено в комментариях :

ОП использовал execlp или подобное, в форме:

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

(или если они не знали о проблеме с NULL, они могли бы пройти NULL вместо (char*)0).

Проблема в том, execlpобычно требуется, чтобы первый аргумент был передан дважды ;во второй раз это значение должно быть установлено как argv[0], в то время как предоставленные пользователем аргументы почти всегда проверяются на argv[1] и выше (значение в argv[0] используется редко, а когда оно используется, в основном для использования/ отладочный вывод).Когда python3 видит свой собственный argv, он видит, что он был вызван с «именем» name_of_script.py, но он не видит его как настоящий «аргумент», поэтому он действует так, как если бы он был запущен сбез аргументов, что приводит к интерактивному интерпретатору.

Исправление состоит в том, чтобы дважды передать имя программы, один раз, чтобы найти программу, один раз, чтобы установить его в 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...