我正在尝试从php运行这样的shell命令:
ls -a | grep mydir
但是php只使用第一个命令。有没有办法强制php将整个字符串传递给shell?
(我不关心输出)
答案 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()函数:
答案 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");