这是我的第一篇文章,所以请告诉我,如果我做错了什么。
我对在ipython中使用不同的编程语言很感兴趣,类似于emacs org模式中的babel/literal编程。我喜欢emacs org模式的一点是,一个人可以有多个“单元”连接到同一个R/bash会话。这允许我重用在文档的前面部分创建的变量/函数,即使我在中间做了其他事情。
我发现在ipython中使用Rmagic是可能的。举个例子
In [1]: %load_ext rpy2.ipython
In [2]: %%R
a <- 3
a
Out [2]: 3
In [3]: something_in_python = 'I am doing something unrelated now'
In [4]: %%R
cat('My variable a is still here, its value is: ', a) # a is still here!
Out [4]: My variable is still here, its value is: 3
字符串
我很希望能够在bash中做类似的事情。但是,无论我使用“%%script bash”还是%%sx,变量都不是持久的。这就是我正在尝试做的:
In [1]: %%script bash
var1="hello"
echo $var1
Out[1]: hello
In [2]: %%script bash
echo $var1 # I need $var1 to be present in this cell too - but its gone!
Out[62]:
型
是否有办法在多个小区中具有相同的基本会话?或者至少以某种方式传递变量。当然,我可以尝试将变量传递到python中,然后再传递回下一个bash单元格,但我觉得一定有更好的方法。谢谢您的帮助!
PS:我在寻找一个解决方案,但我没有找到任何东西,无论是在这里或通过谷歌搜索。有一些东西是这样的:IPython Notebook previous cell content,但它似乎对我的情况没有帮助。
1条答案
按热度按时间soat7uwm1#
一个选项(尽管有限)允许设置stdout和stderr变量。这使您可以在单元格之间设置和传递两个变量。举例来说:
字符串
请注意,eol字符似乎进入了变量。你可以使用echo -n代替echo来防止换行符被添加到变量中。
有关使用stdout和stderr的详细信息,请参见http://nbviewer.ipython.org/github/ipython/ipython/blob/master/examples/IPython%20Kernel/Script%20Magics.ipynb
有关将变量传回的详细信息,请参阅Can I access python variables within a
%%bash
or%%script
ipython notebook cell?