在 Python 中使用 json.loads,并从 PHP json_encode 输出



在我的php脚本中,我运行了以下内容

//PHP script to send json data to python
$t = new test();
$t->testname1 = $testname;
$t->jmx1=$jmx;
#$jsondata=json_encode($t);
$output=shell_exec('python /var/www/metro/run.py' . escapeshellarg(json_encode($jsondata)) );

json 输出示例如下

"{"testname1":"fairul","jmx1":"1562638904.jmx"}"

我想使用上面参数argv1中的json.loads,以便在python中访问它。

import sys, json
# Load the data that PHP sent us
try:
   data = json.loads(sys.argv[1])   
except:
   result = data['testname1']
# Send it to stdout (to PHP)
print json.dumps(result)

不知道为什么我只能获得空输出

您对数据进行了两次编码;只对数据进行了一次编码:

$t->jmx1=$jmx;
$jsondata=json_encode($t);
$output=shell_exec('python /var/www/metro/run.py ' . escapeshellarg($jsondata) );

在 Python 中,删除空白的except处理程序,并将设置result异常处理程序。在这里,我将其移动到try中,在sys.argv[1]不存在时捕获IndexErrorValueError由错误的 JSON 字符串引发,TypeError尝试索引不是字典的内容或为丢失的键抛出的KeyError

import sys, json
# Load the data that PHP sent us
try:
     data = json.loads(sys.argv[1])   
     result = data['testname1']
except (ValueError, TypeError, IndexError, KeyError) as e:
     print json.dumps({'error': str(e)})
     sys.exit(1)
print json.dumps(result)

最新更新