这是我的第一篇帖子,请宽大处理:)
在参考主题时,在写作之前我已经对堆栈溢出进行了彻底的研究,我能找到的最接近的答案是Passing value from PHP script to Python script。
在我的测试中我遇到这种情况: prova.php文件:
<?php
$item1 = 3;
$item2 = 4;
$tmp = exec("python ../cgi-bin/test.py $item1 $item2");
echo $tmp; // invia la richiesta a Python
?>
然后在Python test.py文件中写道:
#!/usr/local/bin/python
import sys
print sys.argv[1] , sys.argv[2]
所有这一切都正常,页面prova.php显示变量的值,即3和4
我无法理解的是如何在test.py中继续product sys.argv[1] * sys.argv[2]
并将其返回给PHP。
我做的所有尝试都将“prova.php”显示为空白页面。
提前感谢您的关注。
=============================================== ===================== 哇,亲爱的格奥尔格,马特,安德鲁和杰瑞克,非常感谢您的宝贵意见!几分钟后你就解决了我几小时内分析的问题(因为你可能已经猜到我是初学者)。
现在一切都很完美!
如果可能的话,我想知道一件事:有没有办法当python运行“print ...”行(在$ output中返回结果)时,该值不显示在页面prova上.php,但只存储在$ output中?
答案 0 :(得分:0)
你必须通过引用exec传递一个将接收输出的变量:
<?php $item1 = 3;
$item2 = 4;
exec("python ../cgi-bin/test.py $item1 $item2", $output);
echo $output; // invia la richiesta a Python ?>
答案 1 :(得分:0)
将第二个参数传递给exec命令以捕获子进程(python)的输出。 http://php.net/manual/en/function.exec.php
$output = array()
exec("python...",$output)
echo $output[0]
答案 2 :(得分:0)
在微服务领域,最好提供REST接口并从CuRL调用中获取数据。当然,这是一个架构调用,但你最有可能更适合采用这种方法。如果不可能采用这种方法,请使用exec命令,正如其他人所指出的那样。但是,如果你的python是在virtualenv中被隔离的,你将需要提供完整的python路径和完整的python脚本位置。
<?php
$item1 = 3;
$item2 = 4;
exec("/path/to/python-venv/bin/python /path/to/python-venv/src/cgi-bin/test.py $item1 $item2", $result);
echo $result;
?>
#!/usr/bin/env python
import sys
print int(sys.argv[1]) * int(sys.argv[2])