我有一个python脚本,我想从PHP运行。 这是我的PHP脚本:
$data = array('as', 'df', 'gh'); // Execute the python script with the JSON data $result = shell_exec('python /path/to/myScript.py ' . escapeshellarg(json_encode($data))); // Decode the result $resultData = json_decode($result, true); // This will contain: array('status' => 'Yes!') var_dump($resultData);
这是我的Python脚本:
import sys, json # Load the data that PHP sent us try: data = json.loads(sys.argv[1]) except: print "ERROR" sys.exit(1) # Generate some data to send to PHP result = {'status': 'Yes!'} # Send it to stdout (to PHP) print json.dumps(result)
我想能够在PHP和Python之间交换数据,但是上面的错误给出了输出:
错误NULL
我哪里错了?
:::::编辑::::::我跑这个:
$data = array('as', 'df', 'gh'); // Execute the python script with the JSON data $temp = json_encode($data); $result= shell_exec('C:\Python27\python.exe test.py ' . "'" . $temp . "'"); echo $result;
我越来越No JSON object could be decoded
在我的机器上,代码工作得很好,并显示:
array(1) { 'status' => string(4) "Yes!" }
另一方面,您可能会做一些更改来诊断您的计算机上的问题。
检查Python的默认版本。 你可以通过从终端运行python
来做到这一点。 如果你看到类似的东西:
Python 2.7.6 (default, Mar 22 2014, 22:59:56) [GCC 4.8.2] on linux2 Type "help", "copyright", "credits" or "license" for more information. >>>
你没事。 如果你看到你正在运行Python 3,这可能是一个问题,因为你的Python脚本是为Python 2编写的。所以:
Python 3.4.0 (default, Apr 11 2014, 13:05:11) [...]
应该是一个线索。
再次从终端运行python myScript.py "[\"as\",\"df\",\"gh\"]"
。 你看到了什么?
{"status": "Yes!"}
很酷。 不同的回应表明,这个问题可能与你的Python脚本有关。
检查权限。 你如何运行你的PHP脚本? 你有访问/path/to/
? 那么/path/to/myScript.php
呢?
用你的PHP代码替换:
<?php echo file_get_contents("/path/to/myScript.php"); ?>
你得到的实际内容?
现在让我们在你的PHP代码中添加一些调试助手。 由于我想象你没有使用调试器,最简单的方法是打印调试语句。 这对于10-LOC脚本来说是可以的,但是如果你需要处理更大的应用程序,请花时间学习如何使用PHP调试器,以及如何使用日志记录 。
结果如下:
/path/to/demo.php
<?php $data = array('as', 'df', 'gh'); $pythonScript = "/path/to/myScript.py"; $cmd = array("python", $pythonScript, escapeshellarg(json_encode($data))); $cmdText = implode(' ', $cmd); echo "Running command: " . $cmdText . "\n"; $result = shell_exec($cmdText); echo "Got the following result:\n"; echo $result; $resultData = json_decode($result, true); echo "The result was transformed into:\n"; var_dump($resultData); ?>
/path/to/myScript.py
import sys, json try: data = json.loads(sys.argv[1]) print json.dumps({'status': 'Yes!'}) except Exception as e: print str(e)
现在运行脚本:
cd /path/to php -f demo.php
这是我得到的:
Running command: python /path/to/myScript.py '["as","df","gh"]' Got the following result: {"status": "Yes!"} The result was transformed into: array(1) { 'status' => string(4) "Yes!" }
你的应该是不同的,并包含有关正在发生的事情的暗示。
我通过在论据中加入引号来实现它的功能! 像这样: <?php $data = array('as', 'df', 'gh'); $temp = json_encode($data); echo shell_exec('python myScript.py ' . "'" . $temp . "'"); ?>
<?php $data = array('as', 'df', 'gh'); $temp = json_encode($data); echo shell_exec('python myScript.py ' . "'" . $temp . "'"); ?>