2017-06-23 80 views
1

我想用使用了shell_exec

$data = escapeshellarg($data); 
$resultpy = shell_exec("/usr/local/bin/python3 path/to/myscript.py 2>&1 $data"); 

$数据JSON对象来运行python3 3.6.1版的脚本了PHP的包含浮点数从USR/local/bin目录执行python3了PHP的上我想在python中做一些计算。由于在Mac OS X 10.9.5上安装后,python3没有出现在/ usr/bin /目录中,所以我确实为python3设置了一个本地bin,用于跟踪Gordon Davisson的建议Cannot create a symlink inside of /usr/bin even as sudo。我对python2做了同样的检查,看它是否会在原理上工作。当使用

$resultpy = shell_exec("/usr/local/bin/python2 path/to/myscript.py 2>&1 $data"); 

,我可以用

$resultpy = shell_exec("/usr/local/bin/python3 path/to/myscript.py 2>&1 $data"); 

时,我也可以用在/ usr /本地成功调用壳都python3与python2运行python脚本,并得到预期的输出,而不是/ bin/python3或/ usr/local/bin/python2。

可能是python脚本本身有问题吗(也许python3与python2相比有些语法改变)?

from collections import OrderedDict 
import sys, json 
import scipy 
import scipy.cluster.hierarchy as sch 

try: 
data = json.loads(sys.argv[1], object_pairs_hook=OrderedDict) 

except (ValueError, TypeError, IndexError, KeyError) as e: 
print json.dumps({'error': str(e)}) 
sys.exit(1) 

print json.dumps(data) 

我还在python脚本的顶部添加了一个she-bang行,但是这并没有像预期的那样解决它。所有导入模块都安装在两个版本中。任何帮助,这是非常感谢!

+1

括在您打印括号中的变量(亦即。'打印(....)') –

+1

谢谢,我也是! – schustischuster

回答

2

如果你想这在python3工作,你就需要打印变更线

from collections import OrderedDict 
import sys, json 
import scipy 
import scipy.cluster.hierarchy as sch 

try: 
    data = json.loads(sys.argv[1], object_pairs_hook=OrderedDict) 

except (ValueError, TypeError, IndexError, KeyError) as e: 
print(json.dumps({'error': str(e)})) 
sys.exit(1) 

print(json.dumps(data)) 
+0

非常感谢您解决这个问题! – schustischuster