Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/295.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.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
运行python脚本并通过PHP获取其输出是一个坏主意吗?_Php_Python - Fatal编程技术网

运行python脚本并通过PHP获取其输出是一个坏主意吗?

运行python脚本并通过PHP获取其输出是一个坏主意吗?,php,python,Php,Python,我正在使用php运行python脚本,并使用json.dump获取其输出,并显示在我的php页面上。我觉得它比在python idle中运行时慢。如果我正确理解了您的问题,那么它的速度也就不足为奇了,因为从PHP调用python脚本,而不是从CLI调用它,会增加您的PC必须执行的操作。考虑这一点:第一个PHP必须创建一个shell来调用脚本,然后等待它完成(例如等待出现在缓冲区中的退出代码),从缓冲区抓取所有的东西,然后将其推到输出缓冲区中,然后刷新输出缓冲区,这样数据实际上会显示在页面上。除此

我正在使用php运行python脚本,并使用json.dump获取其输出,并显示在我的php页面上。我觉得它比在python idle中运行时慢。

如果我正确理解了您的问题,那么它的速度也就不足为奇了,因为从PHP调用python脚本,而不是从CLI调用它,会增加您的PC必须执行的操作。考虑这一点:第一个PHP必须创建一个shell来调用脚本,然后等待它完成(例如等待出现在缓冲区中的退出代码),从缓冲区抓取所有的东西,然后将其推到输出缓冲区中,然后刷新输出缓冲区,这样数据实际上会显示在页面上。除此之外,您的输出数据将被传输两次,首先从Python传输到PHP,然后从PHP传输到浏览器


此外,处理速度取决于调用Python脚本的方法-有几种方法可以实现这一点,其中一些方法的开销比其他方法要大。

您需要告诉我们为什么要这样做,而不是简单地运行脚本。我正在建一个网站,需要Python代码的一些输出。我使用php,因为我不太熟悉Flask或Django。没错。我认为另一个原因可能是我使用了print(json.dump(list_name)),print语句是另一种增加执行时间的开销。我可以不打印就完成吗?只需跳过JSON转储并直接使用输出。我是这样做的(允许后台处理和交互式shell):
f=trim(`mktemp`);passthru($cmd.($show_output?;tee$f):“>$f”)($run_in_background?&':”);在后台返回$run\u$f:修剪(`cat$f;rm-rf$f`)这里的技巧是将命令的输出写入一个临时文件,然后读取该文件。如果不需要后台处理或交互式shell,只需执行以下操作:
$res=`python3myscript.py`print
。不客气:)小错误,顺便说一句,它必须是
$res=`python3myscript.py`。如果您觉得它回答了您的问题,请将其标记为已接受的答案,以便其他人可以看到存在“解决方案”。