pha*_*234 8 wolfram-mathematica
为什么
Import["!python --version", "Text"]
Run Code Online (Sandbox Code Playgroud)
在命令行上工作但不在Mathematica 8(在Mac上运行)的前端工作?
贝壳:
"Python 2.7.1 -- EPD 7.0-2 (64-bit)"
Run Code Online (Sandbox Code Playgroud)
前端:
""
Run Code Online (Sandbox Code Playgroud)
更新:
好的,路径不是(真的)问题,因为
Import["!which python", "Text"]
Run Code Online (Sandbox Code Playgroud)
产量
"/usr/bin/python"
Run Code Online (Sandbox Code Playgroud)
在前端和
"/Library/Frameworks/EPD64.framework/Versions/Current/bin/python"
Run Code Online (Sandbox Code Playgroud)
在shell中(这是我在我的系统上安装的不同的python版本).尽管如此
Import["!/usr/bin/python --version", "Text"]
Run Code Online (Sandbox Code Playgroud)
也不
Import[
"!/Library/Frameworks/EPD64.framework/Versions/Current/bin/python --version",
"Text"]
Run Code Online (Sandbox Code Playgroud)
在前端产生正确的输出.但是在前端和终端版本中使用不同的shell可能会暗示为什么Mathematica行为不端.
WRe*_*ach 10
python --version将其响应写入标准错误流,但Import仅捕获标准输出流.要查看响应,请将stderr重定向到stdout.在大多数shell(甚至Windows)中,这可以使用魔术咒语来实现2>&1:
Import["!python --version 2>&1", "Text"]
Run Code Online (Sandbox Code Playgroud)
前端与命令行不同?
在Mathematica的命令行版本中运行时,该Import命令似乎功能不同,但外观可能是欺骗性的.这是一个成绩单:
$ 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]=
Run Code Online (Sandbox Code Playgroud)
请注意,这Out[1]是空白的.版本字符串出现在脚本中,但这是因为标准错误流正在终端窗口中显示,散布着Mathematica的标准输出.如果我们将结果分配给变量并且(尝试)使用;以下方法抑制输出,则更加清楚:
In[2]:= v=Import["!python --version","Text"];
Python 2.6.4
In[3]:= v
Out[3]=
Run Code Online (Sandbox Code Playgroud)
应该没有任何输出,但我们仍然看到终端窗口中显示的标准错误流. v为空,表示Import表达式的值也是空白的.