来自ipython的系统shell访问问题

时间:2014-07-18 01:06:26

标签: macos shell ipython

看到iPython中的一些奇怪行为似乎取决于它是如何发布的。在终端中启动时,某些shell命令工作(pwd),但是'ls'和'!ls'错误输出 - 请参阅下面的OSError Traceback的§。

使用Qtconsole启动时:“ipython qtconsole --pylab = inline”,一切似乎都很好。

[附加信息:当ipython作为笔记本启动时,shell命令可以正常工作。]

[附加信息#2:“iptest core”生成4个错误 - 所有这些错误都与文件“/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/subprocess.py”有关。 ]

有什么建议吗?谢谢!运行Python 2.7.5,IPython 2.1.0,Mac OSX Mavericks。

...

/Library/Python/2.7/site-packages/IPython/core/interactiveshell.pyc in system_raw(self, cmd)
   2277             cmd = py3compat.unicode_to_str(cmd)
   2278             # Call the cmd using the OS shell, instead of the default /bin/sh, if set.
-> 2279             ec = subprocess.call(cmd, shell=True, executable=os.environ.get('SHELL', None))
   2280             # exit code is positive for program failure, or negative for
   2281             # terminating signal number.


OSError: [Errno 2] No such file or directory

1 个答案:

答案 0 :(得分:3)

我无法理解所有您的症状,但错误[Errno 2]消息表明您的SHELL环境变量包含的值不是指向现有的shell可执行文件。

通常,SHELL包含默认shell可执行文件的完整路径,例如/bin/bash

你可以尝试的事情:

  • 检查echo $SHELL的输出,并确保它包含默认shell可执行文件的完整路径。
  • 使用明确的ipython值调用SHELL并查看问题是否消失:SHELL=/bin/bash ipython

pwd实际上并不调用shell实例,因此这就是您没有看到错误的原因。 相比之下,ls(间接)和!ls(直接)可以。


我正在运行相同的版本,iptest core也在我的机器上失败,虽然不同(ImportError: No module named nose.plugins.builtin) - 但是,至少在我的情况下,它似乎与{{1}运行shell无关,这很好。