У меня есть эта программа на Python 3, у меня проблемы с запуском. Когда я запускаю мысль SSH с помощью python3 4230.py
работает как надо (выводит данные), но когда я пытаюсь запустить его как python 4230.py
это дает мне много ошибок, потому что его программа PY3. Поэтому я хочу найти способ, как сделать так, чтобы этот скрипт PY, который у меня есть, распечатывал ответы. Чтобы повторить все, что Python печатает на сайте, я использую этот плагин WP:
<?php # -*- coding: utf-8 -*-
/* Plugin Name: 4230 */
header('Content-Type: text/html; charset=cp1252');
add_shortcode( '4230', 'execute_python_with_argv' );
function execute_python_with_argv(){
ob_start();
$description = array (
0 => array("pipe", "r"), // stdin
1 => array("pipe", "w"), // stdout
);
$application_system = "python ";
$application_path .= plugin_dir_path( __FILE__ );
$application_name .= "4230.py";
$separator = " ";
$application = $application_system.$application_path.$application_name.$separator;
$pipes = array();
$proc = proc_open ( $application , $description , $pipes );
if (is_resource ( $proc ))
{
$var= stream_get_contents ($pipes [1] ); //Reading stdout buffer
}
echo "<pre>".$var."</pre>";
$output = ob_get_clean();
return $output;
}
В этом коде не должно быть никаких синтаксических ошибок, у меня не было проблем с ним и с python3, когда я работал над WAMP. Но я думаю, что этот код должен активировать программу Python, поэтому, возможно, можно заставить его отправить запрос на запуск Python с python3
?
Также как which python3
через ssh распечатывает /home/meteo/.local/bin/python3
Я попытался добавить эту строку в начало моего Python-скрипта как «Шебанг», как это #!/home/meteo/.local/bin/python3
но это не помогло запустить мой скрипт PY и python3
распечатать данные.
Итак, что я должен сделать, чтобы этот скрипт на python3 работал как python3 и распечатывал ответ?
РЕДАКТИРОВАТЬ: Это ошибка, которую я получаю, когда я запускаю скрипт Python с python 4230.py
:
Traceback (most recent call last):
File "4230.py", line 4, in <module>
from bs4 import BeautifulSoup
File "/home/meteo/public_html/wp-content/plugins/bs4/__init__.py", line 30, in <module>
from .builder import builder_registry, ParserRejectedMarkup
File "/home/meteo/public_html/wp-content/plugins/bs4/builder/__init__.py", line 4, in <module>
from bs4.element import (
File "/home/meteo/public_html/wp-content/plugins/bs4/element.py", line 8, in <module>
from bs4.dammit import EntitySubstitution
File "/home/meteo/public_html/wp-content/plugins/bs4/dammit.py", line 13, in <module>
from html.entities import codepoint2name
ImportError: No module named html.entities
EDITv2: исправлена эта проблема с новым плагином WP:
<?php # -*- coding: utf-8 -*-
/* Plugin Name: viassh */
header('Content-Type: text/html; charset=ANSI_X3.4-1968');
add_shortcode('viassh', 'HelloWorldShortcode');
function HelloWorldShortcode() {
ob_start();
$old_path = getcwd();
chdir('/home/meteo/public_html/wp-content/plugins/');
$output = shell_exec('./4230.py');
chdir($old_path);
echo $output;
$output = ob_get_clean();
return $output;
}
Спасибо за прочтение.
Краткое описание расширенного обсуждения в разделе комментариев и более общий вопрос: «Почему мой скрипт Python не запускается при вызове из PHP, cgi и т. Д.?»
Можете ли вы позвонить Привет, мир сценарий вместо вашего реального сценария? например
#!/usr/bin/env python or python3
from sys import version
print(version)
Если да, отлично, тогда проблема в вашем реальном скрипте Python, а не в том, как вы его называете. Проверьте, можете ли вы запустить скрипт из командной строки (без простых ошибок отступов, усеченных строк из копии&paste), предпочтительно как пользователь, который будет запускать сценарий при запуске через сервер (т.е. не как root / admin). Используйте регистратор, чтобы увидеть, где происходит сбой скрипта.
Если нет, проверьте разрешений а также владелец сценария.
В этом конкретном случае оберните весь начальный Pytyhon и скрипт в файл оболочки и вызовите этот файл с вашего сервера. Немного хакерски, но лучше, чем потерять все свои волосы.
создать файл файл python_script.sh
echo "just a test to see if the script is executed, remove this line later"python3 /absolute/path/to/script/python_script.py
убедитесь, что файл исполнимый используя chmod +x python_script.sh
а затем вызвать этот скрипт через CGI или PHP.
сделать исполняемый скрипт Python
chmod +x script.py./script.py