我认为在shell命令前面加上! (在IPython中)会使系统shell实际执行命令,但情况似乎并非如此。考虑以下情况,从/home/Documents/Rx开始,启动IPython,使用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/
/home/Documents/Rx/Papers
In [2]: pwd
Out[2]: u'/home/Documents/Rx/Papers'
In [3]: exit()
$ pwd
/home/Documents/Rx正如您所看到的,我实际上并没有更改目录;只是在IPython shell中。我认为这是因为我没有在IPython中使用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也会这样做。最后,使用神奇的命令%cd与cd具有相同的效果。那么,这三者之间有什么区别,我如何才能实际告诉system在IPython中执行一个命令呢?
发布于 2016-04-09 03:55:04
!command不让“shell”运行命令。它使shell运行命令。它不是您运行IPython的shell;您不能从IPython向该shell发送命令。这是个新壳。
当您执行!cd时,您将启动一个新的shell,它将更改它自己的当前工作目录并立即关闭。这对IPython或您从IPython中启动的shell没有任何影响。
当您执行cd或%cd时,您告诉IPython更改它自己的工作目录。这将持续到IPython会话期间,但对您从IPython启动的shell仍然没有任何影响。当您停止IPython时,该shell仍然位于启动IPython时的任何目录中。
不能从IPython更改父shell的工作目录。
https://stackoverflow.com/questions/36512527
复制相似问题