如何在system,exec或shell_exec中运行多个命令?

时间:2010-06-28 07:23:56

标签: php shell command-line exec

我正在尝试从php运行这样的shell命令:

ls -a | grep mydir

但是php只使用第一个命令。有没有办法强制php将整个字符串传递给shell?

(我不关心输出)

4 个答案:

答案 0 :(得分:2)

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

首先打开ls -a读取输出,将其存储在var中,然后打开grep mydir写入您从ls -a存储的输出,然后再次读取新输出。

<强> L.E:

<?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;
?>

答案 1 :(得分:0)

答案 2 :(得分:0)

如果你想要命令的输出,那么你可能需要popen()函数:

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

答案 3 :(得分:0)

答案:

请避免为这些微不足道的事情提供广泛的解决方案。这是解决方案: *因为在php中执行它会很长,然后在python中执行它(在python中使用subprocess.Popen需要三行),然后从php调用python的脚本。

最后大约七行,问题最终解决了:

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

如何从php调用python脚本:

system("pyshellforphp.py "ls | grep something");