我在服务器中安装了 SymPi ,从命令行,我可以执行以下操作。
python ./sympy-0.7.5/bin/isympy
(这将打开一个我可以输入数学表达式的控制台。然后是以下表达式)
1 + 2
(将输出3作为输出)
我的目标是使用shell_exec
从php做同样的事情。我写了一个如下所示的php文件,但是没有用。
$command = escapeshellcmd('python ./sympy-0.7.5/bin/isympy');
shell_exec($command);
$output = shell_exec('1 + 2');
任何人都可以帮我弄清楚为什么这不起作用?
请注意,以下脚本可以正常执行python脚本并检索输出。
$command = escapeshellcmd('python C:\PythonPrograms\test3.py');
$output = shell_exec($command);
echo $output;
答案 0 :(得分:0)
每次运行shell_exec时,它都会打开一个全新的shell实例。
编辑:
你可以传递一个python命令来执行:
$expression = '1 + 2';
$cmd = 'python -c \'print "%f" % (' . $expression . ')\'';
$output = shell_exec($cmd);
诚然,这不是使用同情,但对于简单的数学表达式,您可能不需要。如果这样做,您只需要在同一个命令中导入库,如下所示:python -c 'import sympy; print "%f" % sympy.sqrt(3)'
答案 1 :(得分:0)
我的猜测是shell_exec
的工作目录(cwd)与您手动执行时的工作目录(cwd)不同。
您的工作示例指定了可在任何地方使用的硬路径。而您的不工作示例指定了相对路径(./
是cwd)。
将您的呼叫转换为isympy
以在磁盘上提供其完整路径。或者弄清楚如何设置shell_exec
的密码。
(如果这不能解决问题,请说“不能正常工作。”会发生什么?错误?错误的全文是什么?)
答案 2 :(得分:0)
我可以用不同的方式管理所需的结果。
创建了一个python脚本,它接受表达式作为命令行参数,执行并显示输出。
通过将表达式作为命令行参数传递,从php调用此脚本。