【发布时间】:2016-09-12 05:41:15
【问题描述】:
我想将一个 IPython 笔记本与一些 shell 命令及其输入放在一起。在 bash 提示符中,我可以使用“here-document”语法:
bash-3.2$ mysql -u root <<END_IPUT
> use mydb;
> show tables;
> END_INPUT
如何在 IPython 中,特别是在 jupyter notebook 中获得相同的效果?我知道如何将 shell 命令作为 IPython 执行为“line magics”或“cell 魔法”,例如:
In [7]: !! ls -tF
Out[7]: ['Demo-notebook.ipynb',
'createdb.sql',
...
我查看了IPython as a system shell,它展示了如何启用一些语法细节。在以下之后,我可以运行系统命令而无需预先添加! 或!!
# Turn everything in $PATH into an alias;
# then enable calling aliases without ! or %
%rehashx
%autocall 2
但是这些都不能帮助为这些命令提供内联输入:here-document 语法在 IPython 中无效,并导致 python SyntaxError。那我该怎么做呢?
【问题讨论】:
-
你尝试过 bash 细胞魔法吗?以
%%bash行开始一个单元格,然后将 bash 代码放入其中。 -
好建议,谢谢!我已经找到了
%%sx,我认为它的作用相同。但是%bash的文档让我找到了%%script,这正是我想要的正是。与此同时,我还找到了一个专门针对sql的扩展,它更好地解决了我眼前的问题。但如果你想写一个扩展你的建议的答案,我会接受。 -
@Thomas,在你第三次删除我的标签之前,看看有多少人关注每个标签。如果ipython-notebook是这样的问题,请着手进行标签合并。
-
我正在尝试合并标签,但在新标签的使用量是旧标签的 80% 之前我不能这样做。我会定期将新问题扫到新标签上,以增加其数量。谢谢。
-
我明白了。好吧,请停止删除我的标签。两者都应该对你来说已经足够了。 (只需添加 jupyter-notebook 到其他问题。)当然,让标签本身成为同义词。
标签: ipython ipython-notebook jupyter-notebook ipython-magic