Python: не удается выполнить файл php

#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 , что, очевидно, не может работать])