为什么
Import["!python --version", "Text"]
在命令行上工作但不在Mathematica 8(在Mac上运行)的前端工作?
外壳:
"Python 2.7.1 -- EPD 7.0-2 (64-bit)"
前端:
""
更新
好的,路径不是(真的)问题,如
Import["!which python", "Text"]
产量
"/usr/bin/python"
在前端和
"/Library/Frameworks/EPD64.framework/Versions/Current/bin/python"
shell中的(这是我在我的系统上安装的另一个python版本)。尽管如此,
Import["!/usr/bin/python --version", "Text"]
,也不
Import[
"!/Library/Frameworks/EPD64.framework/Versions/Current/bin/python --version",
"Text"]
在前端产生正确的输出。但是在前端和终端版本中使用不同的shell可能会暗示为什么Mathematica行为不端。
答案 0 :(得分:10)
python --version
将其响应写入标准错误流,但Import
仅捕获标准输出流。要查看响应,请将 stderr 重定向到 stdout 。在大多数shell(甚至是Windows)中,可以使用魔术咒语2>&1
:
Import["!python --version 2>&1", "Text"]
前端与命令行不同?
Import
命令出现以在Mathematica的命令行版本中运行时功能不同,但外观可能是欺骗性的。这是一个成绩单:
$ math
Mathematica 8.0 for Microsoft Windows (64-bit)
Copyright 1988-2011 Wolfram Research, Inc.
In[1]:= Import["!python --version","Text"]
Python 2.6.4
Out[1]=
请注意,Out[1]
为空。版本字符串出现在脚本中,但这是因为标准错误流正在终端窗口中显示,散布着Mathematica的标准输出。如果我们将结果分配给变量并使用;
(尝试)抑制输出,则更加清楚:
In[2]:= v=Import["!python --version","Text"];
Python 2.6.4
In[3]:= v
Out[3]=
应该没有任何输出,但我们仍然看到终端窗口中显示的标准错误流。 v
为空,表示Import
表达式的值也为空。
答案 1 :(得分:3)
WReach可以解答您的问题。但是,我的观点仍然是mathematica调用的shell实例没有正确设置路径变量。以下是我的一些信息:
shell是正确的,但路径是默认路径。因此,请获取我修改后的路径,然后调用python --version
: