IPython功能(5)Shell命令

用!可以连接IPython和系统命令。

Shell例子

比如这有一个Linux/OSX界面,是一个用户探索、创建和修改其系统上的目录和文件的例子,
osx:~ $是提示符,其后跟的是命令行,#后面是注释:

osx:~ $ echo "hello world"             # echo is like Python's print function
hello world

osx:~ $ pwd                            # pwd = print working directory
/home/jake                             # this is the "path" that we're sitting in

osx:~ $ ls                             # ls = list working directory contents
notebooks  projects 

osx:~ $ cd projects/                   # cd = change directory

osx:projects $ pwd
/home/jake/projects

osx:projects $ ls
datasci_book   mpld3   myproject.txt

osx:projects $ mkdir myproject          # mkdir = make new directory

osx:projects $ cd myproject/

osx:myproject $ mv ../myproject.txt ./  # mv = move file. Here we're moving the
                                        # file myproject.txt from one directory
                                        # up (../) to the current directory (./)
osx:myproject $ ls
myproject.txt

在IPython里运行Shell命令

加个前缀!就可以实现在IPython里运行Shell命令

In [1]: !ls
myproject.txt

In [2]: !pwd
/home/jake/projects/myproject

In [3]: !echo "printing from the shell"
printing from the shell

从Shell接收value

比如可以用赋值命令存入shell命令的输出:

In [4]: contents = !ls

In [5]: print(contents)
['myproject.txt']

In [6]: directory = !pwd

In [7]: print(directory)
['/Users/jakevdp/notebooks/tmp/myproject']

注意上面返回的结果不是list格式,而是一种IPython定义的特殊格式

In [8]: type(directory)
IPython.utils.text.SList

这格式看起来和行为很像Python列表,但具有额外的功能,例如 grep 和 fields 方法以及 s、n 和 p 属性,允许你以方便的方式搜索、过滤和显示结果。想了解更多可以查看IPython内置help文档。

给Shell传递value

从Python传递变量给shell可以用{varname}

In [9]: message = "hello from Python"

In [10]: !echo {message}
hello from Python

括号包含变量名,它在 shell 命令中被变量的内容替换。

Shell相关magic命令

如果你在IPython里用过一段时间shell命令你会发现 !cd 命令不起作用。

In [11]: !pwd
/home/jake/projects/myproject

In [12]: !cd ..

In [13]: !pwd
/home/jake/projects/myproject

原因是笔记本中的 shell 命令是在临时子 shell 中执行的。如果您想以更持久的方式更改工作目录,可以用magic命令%cd:

In [14]: %cd ..
/home/jake/projects

甚至你还可以省略%:

In [15]: cd myproject
/home/jake/projects/myproject

这种也叫automagic命令,想查看其他此类命令,这些命令可以和%automagic命令切换。
其他shell相关命令还有%cat, %cp, %env, %ls, %man, %mkdir, %more, %mv, %pwd, %rm, 以及%rmdir,这些也可以省略%。

In [16]: mkdir tmp

In [17]: ls
myproject.txt  tmp/

In [18]: cp myproject.txt tmp/

In [19]: ls tmp
myproject.txt

In [20]: rm -r tmp

这种从与 Python 会话相同的终端窗口中访问 shell 的方式,意味着在编写 Python 代码时在编译器和 shell 之间来回切换的次数要少得多。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容