Ipython bash/shell 单元魔法:我可以在单元之间拥有持久变量吗?

2023-12-11

这是我在 SO 上的第一篇文章,所以请告诉我我是否做错了什么。

我对在 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 之前的单元格内容,但这似乎对我的情况没有帮助。


一种选项虽然有限,但允许设置 stdout 和 stderr 变量。这使您可以在单元格之间设置和传递两个变量。例如:

In [1]:%%bash --out var1 --err var2
       echo "Hello"
       echo "Hi" >&2

In [2]:print(var1)
       print(var2)
# Resulting in:
       Hello

       Hi

In [3]:%%bash -s "$var1" "$var2"
       echo "arg1 takes on var1 = $1"
       echo "arg2 takes on var2 = $2"
# Resulting in:
       arg1 takes on var1 = Hello

       arg2 takes on var2 = Hi

请注意,eol 字符似乎已进入变量中。您可以使用 echo -n 而不是 echo 来防止将换行符添加到变量中。

有关使用 stdout 和 stderr 的详细信息,请参阅http://nbviewer.ipython.org/github/ipython/ipython/blob/master/examples/IPython%20Kernel/Script%20Magics.ipynb

有关将变量传回的详细信息,请参阅我可以在 `%%bash` 或 `%%script` ipython 笔记本单元中访问 python 变量吗?

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Ipython bash/shell 单元魔法:我可以在单元之间拥有持久变量吗? 的相关文章

随机推荐

  • 我有两个按钮:“btn1,btn2”,当我改变btn1 alpha的背景时,btn2会随机改变

    我有两个按钮 btn1 btn2 它们与相同的背景图像一起使用 pic1 png 当我更改第一个按钮的背景时 btn1 in OnTouch事件 代码如下 onTouch Action View v MotionEvent event if
  • 动态可扩展的 JVM 堆栈

    The JVM规范表示 JVM 堆栈可以是固定大小的 也可以是动态扩展的 Xss JVM 选项允许设置固定大小 如果我是对的 不设置此选项就是设置默认值 大约 512 2048k 但是如何告诉 JVM 在需要时动态分配其堆栈 如果我无法设置
  • ember.js 所有值的观察者

    在 Ember js 中 是否有一种好方法添加观察者来观察子类实例上的所有更改Ember Object ie 咖啡脚本 Bat Ember Object extend name null age null hank Bat create n
  • Adobe Flex:无法将 XMLList 转换为 mx.collections.IList

    我的 Flex 应用程序运行一个 php 页面的服务 该页面从我的数据库中提取数据 然后以 XML 格式构建结果 我创建了一个名为的新 XMLListtestList在任何函数之外 然后当结果返回时 它们首先作为包含所有 XML 代码的单个
  • Java内存泄漏

    有人使用Eclipse内存管理器来检测java代码中的内存泄漏吗 有人可以推荐一个查找有关使用内存管理器的信息的好地方吗 我在网上读到一些内容 它建议我需要让程序运行直到崩溃 发生内存不足错误 这将生成崩溃报告 然后使用内存管理器打开这个报
  • 如何在 cx_freeze msi 捆绑包中设置快捷方式工作目录?

    我正在开发一个处理 SQLite3 数据库的 Python 程序 我使用 cx Freeze 将其制作为 MSI 安装文件 由 cx Freeze 生成的 msi 安装文件生成的 Windows 快捷方式不提供快捷方式的工作目录属性 因此
  • 与 IOS 深层链接混淆

    我只是想问这里是否有人知道为 IOS 应用程序创建深层链接的逐步过程 我尝试阅读一些文章 但它没有给我绝对的答案 谢谢 深层链接基本上只是设置应用程序的 url 以便其他应用程序可以使用信息启动它 如果您进行设置以便您的应用程序对某些 UR
  • 从 pandas 数据框中选择特定行

    我只想知道 pandas 中是否有任何函数可以根据数据帧中的索引选择特定行 而无需编写自己的函数 例如 从大型数据框中选择索引为 15 50 的行 我已经写了这个函数 但我想知道是否有快捷方式 def split concat data f
  • 如何将 uint8 转换为字符串

    我想转换uint8串起来 但不知道如何串起来 package main import fmt import strconv func main str Hello fmt Println str 1 101 fmt Println strc
  • R data.table:对文件夹中的所有 .csv 文件使用 fread 跳过每个文件的最后一行

    我有数百个 csv 文件需要使用 fread 读取并保存为一个数据表 每个 csv 的基本结构都是相同的 有需要跳过的标头信息 使用skip 很容易 我很难跳过每个 csv 文件的最后一行 每个 csv 文件都有不同的行数 如果我在 Tes
  • 结合 Interlocked.Increment 和 Interlocked.Exchange

    我希望以原子方式递增静态变量 并同时以无锁方式将新值分配给实例字段 目标是让每个对象在创建时获得唯一的 递增的 id 这样两个对象就不可能获得相同的 id 下面的代码能实现这个目的吗 class MyClass private static
  • 在 Windows 服务中使用 SHFileOperation

    这是可能的 但是在 Windows 服务中使用 SHFileOperation 是否合适 shell32 dll 中的所有这些 SHxxx API 函数似乎都是根据用户级程序编写的 我可以确定 SHFileOperation 永远不会显示
  • DirectoryInfo 对象的 Length 属性

    K test 中存在空目录 New Folder gt a gci K test目录不应具有 Length 属性 让我们检查 bool a PSobject Properties Name match Length False 是的 没有
  • 访问 1x1 matlab 单元格的内容

    我不确定术语 但我已将数据从文本文件读取到 1x1 元胞数组中P 检查时P 它在 1 1 位置列出 从那里我可以双击它 它会打开我真正想要的 142x2 单元格 问题是 我不知道如何通过代码操作这些数据以将 1x1 元胞数组转换为 142x
  • Rails:多步表单上的动态选择不保持选择

    我正在按照瑞安 贝茨 Ryan Bates 的要求 为订单下达流程制定多步骤表单多步骤教程 217它使用会话 第一步 我有两个选择字段 一个用于国家 陆地 一个动态用于运输服务 选择土地后 运输服务将通过 javascript jQuery
  • 程序类型已存在:org.apache.http.auth.AuthSchemeFactory

    I used Picasso作为我的应用程序项目和聊天库的依赖项 这是我在编译代码时遇到的错误 程序类型已存在 org apache http auth AuthSchemeFactory 消息 种类 错误 文本 程序类型已存在 org a
  • 从 ggplot 检索颜色 - 值映射

    我假设 ggplot 尺度创建了某种函数来读取适当的aes值并返回colour size等等 这可以用作独立功能吗 例如 对于这个函数 我将传递必要的参数 range limits high low等 和我想要获取映射的值 函数的输出将是c
  • 如何使用 useState 挂钩在 forEach 循环中设置状态

    我想将数组 A 中的数据传输到对象 B 中 所以我做了类似 array forEach e gt setB B e 的操作 但似乎在遍历后面的元素时 以前的行动已经被 遗忘 了 我该如何实现我的目标呢 原型应该是这样的 import Rea
  • Java无法解析的日期SimpleDateFormat [重复]

    这个问题在这里已经有答案了 我有一个看起来像这样的约会 Sun Dec 29 00 24 09 CET 2019 我有一个小实用方法 可以将字符串日期从一种格式解析为另一种格式 public String formatDate String
  • Ipython bash/shell 单元魔法:我可以在单元之间拥有持久变量吗?

    这是我在 SO 上的第一篇文章 所以请告诉我我是否做错了什么 我对在 ipython 中使用不同的编程语言感兴趣 类似于 emacs org 模式下的 babel literal 编程 我喜欢 emacs org 模式的一点是 可以有多个