Чтобы ответить на проблему , как определено в комментариях :
ОП использовал 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