Как запустить сканер на Python с PHP


Сделал гусеничные с Python и запускаю это из командной строки:

python crawler.py

Так что я запускаю эту команду, он запрашивает у меня пароль, который будет искать, и начать работать.

global keyword
keyword = raw_input('Keyword: ')

Эти данные используются на платформе Laravel/PHP. Но я хотел бы создать кнопку типа "Обновить", чтобы пользователь сам мог запустить сканер, просто нажав на определенную кнопку и вводите ключевое слово.

Author: Lucas Lopes, 2017-01-27

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);
 2
Author: Guilherme Nascimento, 2017-01-27 13:29:43