Как запустить сканер на Python с PHP
Сделал гусеничные с Python и запускаю это из командной строки:
python crawler.py
Так что я запускаю эту команду, он запрашивает у меня пароль, который будет искать, и начать работать.
global keyword
keyword = raw_input('Keyword: ')
Эти данные используются на платформе Laravel/PHP. Но я хотел бы создать кнопку типа "Обновить", чтобы пользователь сам мог запустить сканер, просто нажав на определенную кнопку и вводите ключевое слово.
1 answers
Если вы создаете гусеничные или, если он простой, то, возможно, лучше написать полностью на PHP, но это только предложение.
Теперь, если вы хотите отправить "input" для другой программы, а не использовать system
, exec
или - shell_exec
, вы должны использовать popen
, который позволяет "общаться" с-поток, то есть может посылать команды для программы, такие как telnet
(только для примера)
Нет необходимости fgets или фред, сам
popen
при закрытии отправляет результат для того чтобы вывести наружу (STDOUT
), если вы хотите захватить вывод, можно использоватьob_start
, пример должен выглядеть так:
<?php
$input = 'Comando enviado';
$dir = dirname(__FILE__); //Apenas para pegar a pasta relativa
$comando = 'python ' . $dir . '/crawler.py'; //Gera o comando
$handle = popen($comando, 'w'); //inicia o processo
fwrite($handle, $input);
pclose($handle);
И пример кода на Python (здесь я использую 3.6, но это только обмениваться input
raw_input
, если для Python2):
import sys
keyword = input('Keyword: ')
print(keyword)
, Но если использовать с другими программами или системами, могут возникнуть некоторые проблемы, поэтому, для windows, возможно, вы можете использовать start /B
like-unix можете использовать 2>&1
, а не
<?php
$dir = dirname(__FILE__);
$comando = $dir . '/crawler.py';
$input = 'Olá mundo!';
if (strtoupper(substr(PHP_OS, 0, 3)) === 'WIN') {
$comando = 'start /B python ' . escapeshellarg($comando);
} else {
$comando = 'python ' . escapeshellarg($comando) . ' 2>&1';
}
$handle = popen($comando, 'w'); //inicia o processo
fwrite($handle, $input);
pclose($handle);