在我的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]
不存在时捕获IndexError
,ValueError
由错误的 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)