Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/250.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP显示从python脚本返回_Php_Python_Output_Exec - Fatal编程技术网

PHP显示从python脚本返回

PHP显示从python脚本返回,php,python,output,exec,Php,Python,Output,Exec,我无法让php显示python脚本的完整结果,只打印最后一条基本打印语句。我做错了什么?为什么php不显示python脚本的输出 php 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脚本的

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

php

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输出仅为

停止


谢谢

exec
将始终返回命令结果的最后一行。因此,如果需要执行命令的每一行输出。然后,你需要写以下内容:

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

string exec ( string $command [, array &$output [, int &$return_var ]] )
如果存在
输出
参数,则指定的数组将被删除 填充命令的每一行输出。
此数组中不包括空白,例如\n。注意,如果 数组已包含一些元素,exec()将附加到 数组的末尾。如果不希望函数附加元素, 在将数组传递给exec()之前,对数组调用unset()


exec
将始终返回命令结果的最后一行。因此,如果需要执行命令的每一行输出。然后,你需要写以下内容:

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

string exec ( string $command [, array &$output [, int &$return_var ]] )
如果存在
输出
参数,则指定的数组将被删除 填充命令的每一行输出。
此数组中不包括空白,例如\n。注意,如果 数组已包含一些元素,exec()将附加到 数组的末尾。如果不希望函数附加元素, 在将数组传递给exec()之前,对数组调用unset()


您需要将
$result
作为参数传递到
exec()
中,否则只能得到最后一条语句

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

这将获得一个输出数组,
$result[0]
将包含
stop
$result[sizeof($result)-1]
将包含
stop
,其间的所有内容都将包含程序的其余输出。

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

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

这将获得一个输出数组,
$result[0]
将包含
stop
$result[sizeof($result)-1]
将包含
stop
,其间的所有内容都将包含程序的其余输出。

这将使用print\r($result);显示开始,($result[0])显示S,但($result[-1])不显示任何内容。打印($result[sizeof($result)-1]);给我看S@Anthony请重读我写的东西。看起来您仍然在做
$result=exec('pythonlist.py')
而不是
exec('pythonlist.py',$result)以书面执行方式执行('pythonlist.py',$result);打印($result[0]);我得到的结果如上所述,我已经测试并确认,得到这个结果的唯一方法是,如果您仍在执行
$result=exec('python list.py')
$result=exec('pythonlist.py',$result)。我提供的确切代码正如预期的那样工作。这使用print\r($result);显示开始,($result[0])显示S,但($result[-1])不显示任何内容。打印($result[sizeof($result)-1]);给我看S@Anthony请重读我写的东西。看起来您仍然在做
$result=exec('pythonlist.py')
而不是
exec('pythonlist.py',$result)以书面执行方式执行('pythonlist.py',$result);打印($result[0]);我得到的结果如上所述,我已经测试并确认,得到这个结果的唯一方法是,如果您仍在执行
$result=exec('python list.py')
$result=exec('pythonlist.py',$result)。我提供的确切代码正如预期的那样工作。