cd vs!cd vs%cd在IPython中

bcf

我以为!在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中执行命令?

user2357112支持Monica

!command不会使“外壳”运行命令。它使一个运行命令外壳。这不是您运行IPython的外壳;您无法从IPython将命令发送到该Shell。这是一个新的外壳。

执行此操作时!cd,您将启动一个新的shell,该shell会更改其当前的工作目录并立即关闭。这对IPython或从中启动IPython的外壳没有影响。

当您执行cd或时%cd,您告诉IPython更改其自己的工作目录。这将在IPython会话期间持续存在,但是对于您从中启动IPython的外壳仍然没有影响。当您停止IPython时,该Shell仍将位于启动IPython时所在的目录中。

您无法从IPython更改父外壳的工作目录。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章