首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Mathematica中运行外部命令时出现非常奇怪的行为

在Mathematica中运行外部命令时出现非常奇怪的行为
EN

Stack Overflow用户
提问于 2011-05-30 06:55:18
回答 2查看 737关注 0票数 8

为什么

代码语言:javascript
复制
Import["!python --version", "Text"]

在命令行上工作,而不是在Mathematica 8的前端(在Mac上运行)?

Shell:

代码语言:javascript
复制
"Python 2.7.1 -- EPD 7.0-2 (64-bit)"

前端:

代码语言:javascript
复制
""

更新:

好吧,路径(实际上)不是问题所在,因为

代码语言:javascript
复制
Import["!which python", "Text"]

收益率

代码语言:javascript
复制
"/usr/bin/python"

在前台和

代码语言:javascript
复制
"/Library/Frameworks/EPD64.framework/Versions/Current/bin/python"

在shell中(这是我在系统上安装的一个不同的python版本)。尽管如此,无论是

代码语言:javascript
复制
Import["!/usr/bin/python --version", "Text"]

nor

代码语言:javascript
复制
Import[
"!/Library/Frameworks/EPD64.framework/Versions/Current/bin/python --version",
"Text"]

在前端产生正确的输出。但在前端和终端版本中使用不同的shell可能暗示了Mathematica行为不端的原因。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-05-30 09:29:41

python --version将其响应写入标准错误流,而Import仅捕获标准输出流。要查看响应,请将stderr重定向到stdout。在大多数shell(甚至是Windows)中,可以使用魔法咒语2>&1来实现这一点

代码语言:javascript
复制
Import["!python --version 2>&1", "Text"]

与命令行?不同的前端

在命令行版本的Mathematica中运行时,Import命令的功能似乎有所不同,但外观可能具有欺骗性。以下是文字记录:

代码语言:javascript
复制
$ 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的标准输出。如果我们将结果赋给一个变量并(尝试)使用;抑制输出,这一点就更清楚了

代码语言:javascript
复制
In[2]:= v=Import["!python --version","Text"];
Python 2.6.4

In[3]:= v

Out[3]=

不应该有任何输出,但是我们仍然可以看到终端窗口中显示的标准错误流。v为空,表明Import表达式的值也为空。

票数 10
EN

Stack Overflow用户

发布于 2011-05-30 07:23:03

WReach已经为您的问题找到了答案。但是,我的观点仍然是,mathematica调用的shell实例没有正确设置path变量。以下是我的一些信息:

shell是正确的,但路径是默认路径。因此,查找我修改过的路径,然后调用python --version

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6170960

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档