Как передавать переменные из PHP в Python и обратно?

#python #php #shell-exec #sys

#python #php #shell-exec #sys

Вопрос:

У меня есть файл PHP и файл Python. PHP-файл:

 <?php
echo shell_exec("python wamp64/www/PHP Test/TestPython.py 'param1' 'param2'")
?>
  

Файл Python:

 import sys

x = sys.argv[1]
y = sys.argv[2]

print (x)
print (y)
  

Когда я запускаю PHP-файл, он не показывает X и Y. Файлы находятся в одной папке, и я уже пытался указать только имя файла вместо полной папки, но это также не работает. Кто-нибудь знает, почему это не работает?
Я использую WAMP для PHP и Python 3.9.0.

Комментарии:

1. Выполняет ли он вообще какой-либо Python ?! wamp64/www/PHP и Test/TestPython.py понимаются как два отдельных аргумента для начала…

2. Я немного новичок в этом, поэтому прошу прощения, если в этом есть ошибки, но, как я уже сказал. Я пробовал только с TestPython.py . Это не работает.

3. Для чего нужна строка «wamp64/www / PHP»?

4. Это для перехода к файлу, но даже если я просто введу имя файла, это не сработает.

Ответ №1:

Я не уверен, что вам все еще нужен ответ на ваш вопрос, но после того, как я попробовал несколько вещей здесь и там на моем локальном компьютере с Windows, я думаю, что проблема может быть связана с той частью вашего PHP-файла, где в имени каталога есть пробел. В частности, часть «PHP Test». В Windows, исходя из прошлого опыта и проверки немного назад, когда есть имена папок, в которых есть пробел, вам нужно каким-то образом добавить кавычки вокруг имени папки (и мне нравится заключать весь путь к файлу в двойные кавычки, если это необходимо).

Итак, основываясь на примере, который я попробовал на своем локальном компьютере, если бы вы изменили свой PHP-файл на что-то похожее на это:

 <?php
echo shell_exec('python "wamp64/www/PHP Test/TestPython.py" "param1" "param2"')
?>
  

это может работать так, как ожидалось. Я изменил типы используемых кавычек, чтобы внешние кавычки были одинарными, а внутренние кавычки — двойными.

Когда я запускаю пример, подобный этому (примечание: «имя пользователя» заменяется фактическим именем пользователя):

 <?php
echo shell_exec('python "C:UsersusernameDocumentsSpace TextTestPython.py" "param1" "param2"')
?>
  

Я получаю этот результат (примечание: «username» заменяется фактическим именем пользователя):

 PS C:UsersusernameDownloadsphp-7.4.15-nts-Win32-vc15-x64> .php.exe C:UsersusernameDocuments"Space Text"test.php
param1
param2
  

Если это все еще не работает, я бы убедился, что вы используете полный путь к TestPython.py файлу в своем PHP-коде. Чтобы найти полный путь в Windows, я обычно пытаюсь найти соответствующий файл (на этот раз это будет TestPython.py ) с помощью проводника Windows. После того, как вы нашли файл, если вы нажмете на раздел путь к файлу заголовка проводника Windows, он должен сократить путь до строки текста, который можно скопировать и вставить в ваш PHP-файл. Вам также может потребоваться добавить заключительную TestPython.py часть в конце этой скопированной / вставленной строки.

Окно проводника

Кроме того, я не работал с WAMP, насколько я помню, поэтому я не знаю, должен ли путь к файлу в вашем PHP-коде к TestPython.py файлу иметь что-либо перед wamp64 частью. Например, находится ли wamp64 каталог где-нибудь в C: каталоге? Если это так, вам может потребоваться добавить путь к файлу перед wamp64 частью, если он есть; может быть, что-то вроде C:pathtowamp64 . Эта часть, возможно, и не нужна, но я хотел добавить это в качестве примечания.

Ответ №2:

Вот простое решение. Предположим, что ваш каталог C:UsersusernameDesktopXAMPPhtdocsProject

 Project
 |__ python_filename.py
 |__ php_filename.php
  

python_filename.py

 import sys

x = sys.argv[1]
y = sys.argv[2]
print(x,y)
  

php_filename.php файл

 <?php
echo shell_exec("python /Users/username/Desktop/XAMPP/htdocs/Project/python_filename.py param1 param2")
?>

  

Вывод

 param1 param2