在我的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)
不确定为什么我只能获得NULL输出
答案 0 :(得分:1)
您对数据进行了两次编码;只编码一次:
$t->jmx1=$jmx;
$jsondata=json_encode($t);
$output=shell_exec('python /var/www/metro/run.py ' . escapeshellarg($jsondata) );
在Python中,删除已消隐的except
处理程序,并移动异常处理程序的result
设置。在这里,我将其移至try
,在IndexError
不存在的情况下捕获sys.argv[1]
,在错误的JSON字符串引发ValueError
,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)