2017-04-02 90 views
0

我无法让php显示我的python脚本的完整结果,只打印最后一个基本的打印语句。我在这里做错了什么?为什么php不显示python脚本的输出?从python脚本返回PHP显示

PHP

$result = exec('python list.py'); 
echo $result; 

list.py

import subprocess 

print "start" 

a = subprocess.Popen(["ls", "-a"], stdout=subprocess.PIPE) 
a.wait() 
result_str = a.stdout.read() 
print result_str 

print "stop" 

命令行输出该Python脚本是如下

start 
...filename 
...filename 
...etc...etc 

stop 

从执行Python脚本输出的PHP是唯一

停止

谢谢

回答

1

您需要将$result作为参数传入exec()否则您只会得到最后一条语句。

exec('python list.py', $result); 
print_r($result); 

这将让输出数组,$result[0]将包含stop$result[sizeof($result)-1]将包含stop之间的一切将包含你的程序输出的其余部分。

+0

这使用print_r($ result);显示我开始和($结果[0])显示我S,但($结果[-1])显示我什么都没有。 print_r($ result [sizeof($ result)-1]);给我看S – Anthony

+0

@安东尼请重新阅读我写的东西。看起来你还在做'$ result = exec('python list.py');'而不是'exec('python list.py',$ result);' – Augwa

+0

这样做是以书面形式执行的('python list。 py',$ result); print_r($ result [0]);并得到如上所述的结果 – Anthony

1

exec总是回报从命令的结果的最后一行。所以,如果你需要执行命令的每一行输出。然后,你需要如下写:

$result = exec('python list.py', $ouput); 
print_r($output) 

exec

文档

string exec (string $command [, array &$output [, int &$return_var ]]) 

如果output参数存在,则指定数组将 充满每一行来自命令的输出。尾随 空格(例如\ n)未包含在此数组中。请注意,如果 数组已包含某些元素,则exec()将追加到数组的末尾 。如果您不希望函数追加元素, 在将数组传递给exec()之前会调用unset()方法。