Как запустить несколько команд в системе, exec или shell_exec? - PullRequest
2 голосов
/ 28 июня 2010

Я пытаюсь запустить команду оболочки следующим образом: php:

ls -a | grep mydir

Но php использует только первую команду.Есть ли способ заставить php передать всю строку в оболочку?

(мне наплевать на вывод)

Ответы [ 4 ]

2 голосов
/ 28 июня 2010

http://www.php.net/manual/en/function.proc-open.php

Сначала откройте ls -a прочитайте вывод, сохраните его в переменной, затем откройте grep mydir запишите вывод, который вы сохранили из ls -a, затем снова прочитайте новый вывод.

LE:

<?php
//ls -a | grep mydir

$proc_ls = proc_open("ls -a",
  array(
    array("pipe","r"), //stdin
    array("pipe","w"), //stdout
    array("pipe","w")  //stderr
  ),
  $pipes);

$output_ls = stream_get_contents($pipes[1]);
fclose($pipes[0]);
fclose($pipes[1]);
fclose($pipes[2]);
$return_value_ls = proc_close($proc_ls);


$proc_grep = proc_open("grep mydir",
  array(
    array("pipe","r"), //stdin
    array("pipe","w"), //stdout
    array("pipe","w")  //stderr
  ),
  $pipes);

fwrite($pipes[0], $output_ls);
fclose($pipes[0]);  
$output_grep = stream_get_contents($pipes[1]);

fclose($pipes[1]);
fclose($pipes[2]);
$return_value_grep = proc_close($proc_grep);


print $output_grep;
?>
0 голосов
/ 06 марта 2014

Ответ:

ПОЖАЛУЙСТА, избегайте обширных решений для таких тривиальных вещей.Вот решение: * как это было бы так долго делать в php, затем делать это в python (использование subprocess.Popen в python заняло бы три строки), а затем вызывать скрипт python из php.

Это около семи строк в конце, и проблема в итоге решается:

Скрипт на python, назовем его pyshellforphp.py:

import subprocess
import sys
comando = sys.argv[1]
obj = subprocess.Popen(comando, stdout=subprocess.PIPE, stderr=subprocess.PIPE,   shell=True)
output, err = obj.communicate()
print output

как вызвать скрипт на pythonс php:

system("pyshellforphp.py "ls | grep something");
0 голосов
/ 28 июня 2010

Если вы хотите получить вывод команды, то вам, вероятно, вместо этого нужна функция popen ():

http://php.net/manual/en/function.popen.php

0 голосов
/ 28 июня 2010
...