#python #php
Вопрос:
У меня есть простая игра «палач», написанная на python, теперь я пытался выполнить какой-то внешний код через свою программу. Я настроил php-скрипт, который открывает/создает txt-файл и записывает слово в начале каждой игры.
PHP
<?php
$word = $argv[1];
$file = fopen('GamesHistory.txt', 'w');
fwrite($file, $word);
fclose($file);
?>
Посмотрев в Интернете, я нашел 3 способа добиться этого:
subprocess.run()
subprocess.Popen()
os.system()
Это все мои попытки и результат
1-я попытка
subprocess.run('php writetofile.php ' chosenWord)
Результат: код зависает на неопределенный срок
2-я попытка
subprocess.run(['php', 'writetofile.php ', chosenWord])
Результат: код зависает на неопределенный срок
3-я попытка
subprocess.run(['php', '~/hen-durance/writetofile.php ', chosenWord])
Результат: код зависает на неопределенный срок
4-я попытка
subprocess.run(['php', '~/hen-durance/writetofile.php ', chosenWord], shell=True)
Результат: код зависает на неопределенный срок
5-я попытка
subprocess.Popen(['php', '~/hen-durance/writetofile.php ', chosenWord], shell=True)
Результат: Код заканчивается без ошибок, ничего не сделано, файл txt пуст
6-я попытка
subprocess.Popen(['php', '~/hen-durance/writetofile.php ', chosenWord], shell=True)
Результат: Код заканчивается без ошибок, ничего не сделано, файл txt пуст
7-я попытка
subprocess.Popen(['php', '~/hen-durance/writetofile.php ', chosenWord])
Результат: Код заканчивается без ошибок, ничего не сделано, файл txt пуст
8-я попытка
os.system('/usr/bin/php ~/hen-durance/writetofile.php' chosenWord)
Результат: Код заканчивается без ошибок, ничего не сделано, файл txt пуст
Я подумал, что, возможно, команда оболочки неверна, но если я введу ее вручную, она сработает как заклинание. Открытие консоли python и отправка любой из этих команд приводит к тому же результату.
Есть идеи?
Комментарии:
1. Мне действительно хотелось бы знать, зачем возиться с php-кодом для написания слова, когда это можно сделать с помощью python.
2. Версия/попробуйте 2 вашего звонка работает для меня. Не пробовал ничего другого.
3. @ФабиоР. если вы уверены, что это проблема с путем, дважды проверьте это. Начните с размещения обоих сценариев в одной папке и перейдите оттуда. Если это не работает, проверьте, действительно ли вы выполняете php-скрипт (повторив полученный параметр). Если по какой-то причине он пуст, также проверьте директиву
register_argc_argv
php.ini. Удачи!4. Да, это проблема пути. Перейдите в эту папку (где у вас есть php-скрипт) и выполните
pwd
следующее 🙂5. @ФабиоР. в этом нет необходимости, спасибо. Рад, что смог как-то помочь 🙂
Ответ №1:
Благодаря @nitrin0 я нашел ответ:
если вы хотите использовать subprocess.run()
, вы должны указать ПОЛНЫЙ путь ко всему (например subprocess.run(['/usr/bin/php', '/home/admin/hen-durance/writetofile.php ', word])
).
если вы хотите использовать os.system()
, вы можете не указывать путь, но не забудьте правильно отформатировать команду (например, os.system('php writetofile.php ' word)
[обратите внимание на пробел перед заключительной цитатой, я не помещал ее туда раньше, поэтому мой скрипт выполнил php writetofile.phpword
, что, очевидно, не может работать])