Запустите команду php с помощью Boost::Process

Я пытаюсь запустить PHP-скрипт и получить вывод из стандартного вывода, код выглядит так:

using namespace boost::process;

std::string exec="php";
std::vector<std::string> args;

// I must to throw the exe by argument
args.push_back("php");
args.push_back("a.php");

context ctx;
ctx.stdout_behavior = capture_stream();
child c = launch(exec, args, ctx);

pistream &is = c.get_stdout();

В stdout нет информации, но в stderr я получаю:

"boost::process::detail::posix_start: execve(2) не удалось: Отказано в доступе"

И когда я запускаю точно такую ​​же команду в терминале, она работает нормально!

Любые решения?

Спасибо..


person Community    schedule 09.11.2012    source источник
comment
Получите разрешения и внутри boost (не только в терминале), и все будет в порядке.   -  person hakre    schedule 09.11.2012
comment
Как получить разрешения внутри boost? Я попытался запустить свое приложение из терминала с помощью sudo, но это не помогло...   -  person    schedule 09.11.2012
comment
Скорее всего он работает под другим пользователем. Либо измените пользователя, либо разрешите этому пользователю также выполнять скрипт. Вы работаете на unixoid системе?   -  person hakre    schedule 09.11.2012
comment
У меня нет (нулевого) опыта работы с boost, однако это звучит как конфликт со списками ACL в вашей файловой системе. Проверьте права доступа к файлу, который вы хотите запустить (php).   -  person hakre    schedule 09.11.2012
comment
Спасибо, вы дали мне правильное направление! Я зашел в /usr/bin/, чтобы проверить разрешение и увидел команду php5 с такими же разрешениями (php — это ссылка на php5). Я не понимаю почему, но когда я заменил команду на php5, предыдущая ошибка заменилась на Нет такого файла или каталога, а когда я указал полный путь, он работает нормально: exec=/usr/bin/php5; аргументы.очистить(); args.push_back (php5);   -  person    schedule 09.11.2012
comment
Ах! Ну, переменная $PATH была другой. Не думал об этом.   -  person hakre    schedule 09.11.2012
comment
И: Поместите свое решение в качестве ответа ниже с некоторым описанием. Вы можете принять его позже. Совершенно нормально отвечать на свои вопросы.   -  person hakre    schedule 09.11.2012
comment
Пользователи с репутацией менее 10 не могут ответить на свой вопрос в течение 8 часов после вопроса. Вы можете самостоятельно ответить в течение 6 часов. До тех пор, пожалуйста, используйте комментарии или вместо этого отредактируйте свой вопрос.   -  person    schedule 09.11.2012
comment
Ах я вижу. Теперь у вас 11 репутации. ;) Дайте мне знать, если вы все еще сталкиваетесь с проблемой через комментарии здесь.   -  person hakre    schedule 09.11.2012
comment
Хм... Спасибо! Это мой первый вопрос =)   -  person    schedule 09.11.2012


Ответы (1)


Спасибо @hakre, ты дал мне правильное направление!

Я пошел в /usr/bin/, чтобы проверить разрешение и увидел команду php5 с теми же разрешениями, что и php (php — это ссылка на php5).

Я не понимаю почему, но когда я заменил команду на php5, предыдущая ошибка заменилась на: «Нет такого файла или каталога», и когда я указал полный путь, он отлично работает:

exec="/usr/bin/php5";
args.clear();
args.push_back("php5");
person Community    schedule 09.11.2012