#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