我以为!
在IPython中用shell命令加上shell命令可以使系统外壳实际执行该命令,但事实并非如此。考虑以下内容,我从此处开始/home/Documents/Rx
,启动IPython,使用命令cd
(带有no !
),然后退出IPython并查看我所在的目录:
$ pwd
/home/Documents/Rx
$ ipython
Python 2.7.11 |Anaconda 2.5.0 (64-bit)| (default, Dec 6 2015, 18:08:32)
Type "copyright", "credits" or "license" for more information.
IPython 4.0.3 -- An enhanced Interactive Python.
? -> Introduction and overview of IPython's features.
%quickref -> Quick reference.
help -> Python's own help system.
object? -> Details about 'object', use 'object??' for extra details.
In [1]: cd Papers/
/home/Documents/Rx/Papers
In [2]: pwd
Out[2]: u'/home/Documents/Rx/Papers'
In [3]: exit()
$ pwd
/home/Documents/Rx
如您所见,我实际上没有更改目录;仅在IPython Shell中。我以为这是因为我没有!cd
在IPython中使用,但这也不起作用:
$ pwd
/home/Documents/Rx
$ ipython
Python 2.7.11 |Anaconda 2.5.0 (64-bit)| (default, Dec 6 2015, 18:08:32)
Type "copyright", "credits" or "license" for more information.
IPython 4.0.3 -- An enhanced Interactive Python.
? -> Introduction and overview of IPython's features.
%quickref -> Quick reference.
help -> Python's own help system.
object? -> Details about 'object', use 'object??' for extra details.
In [1]: !cd Papers/
In [2]: pwd
Out[2]: u'/home/Documents/Rx'
In [3]: exit()
$ pwd
/home/Documents/Rx
请注意,在这种情况下,IPython shell也没有更改目录;而是,它不会更改目录。但是我本来希望实际的shell能够这样做。最后,使用magic命令%cd
具有与相同的效果cd
。那么,这三者之间有什么区别,我如何真正告诉系统外壳在IPython中执行命令?
!command
不会使“外壳”运行命令。它使一个运行命令外壳。这不是您运行IPython的外壳;您无法从IPython将命令发送到该Shell。这是一个新的外壳。
执行此操作时!cd
,您将启动一个新的shell,该shell会更改其当前的工作目录并立即关闭。这对IPython或从中启动IPython的外壳没有影响。
当您执行cd
或时%cd
,您告诉IPython更改其自己的工作目录。这将在IPython会话期间持续存在,但是对于您从中启动IPython的外壳仍然没有影响。当您停止IPython时,该Shell仍将位于启动IPython时所在的目录中。
您无法从IPython更改父外壳的工作目录。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句