首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将参数传递给单元格魔术%%脚本

将参数传递给单元格魔术%%脚本
EN

Stack Overflow用户
提问于 2018-08-07 17:13:36
回答 1查看 2.1K关注 0票数 7

最相关的问题是:在Ipython中,如何将参数传递给单元格,就好像它是它自己的脚本一样?

我正在编写一个ipython笔记本来进行模拟,然后在截图中创建一个动画。我这样做的方法是用魔术命令运行一个单元格

代码语言:javascript
复制
%%script pvpython

因为截视有自己的解释器。问题是,我需要它将vtu文件的目录作为参数传递给它(这是IPython内核中的一个变量)。到目前为止,我还没有弄清楚这一点。我试过:

代码语言:javascript
复制
%%script pvpython path/to/files
import argparse
parser = argparse.ArgumentParser()
parser.add_argument('foo')
args = parser.parse_args()
print(args.foo)

但这会产生一个错误:` not未知参数: path/ to /files,因为参数被传递给魔术命令,而不是python脚本。有办法绕过这件事吗?

编辑:,这与链接问题不同,因为我使用的是单元格魔术,而不是行魔术。我希望我的所有代码都能单独在笔记本上看到。

EN

回答 1

Stack Overflow用户

发布于 2020-08-09 19:34:27

我不太记得我是在哪里找到这个的,而且它似乎没有被记录下来,但是这对于细胞魔法来说是非常有用的特性。

这不是python格式化机制,它是用于从!开始的行魔法内插的jupyter内插。注意不小心引用的变量中没有引号。

第1室:

代码语言:javascript
复制
simple_var = 123
crazy_var = " with spaces \n 'asdf' $DOLLAR$$ $$SIGNS$$ "
import shlex
tamed_var = shlex.quote(crazy_var)

第2室:

代码语言:javascript
复制
%%bash -s '{simple_var}' {tamed_var} '{crazy_var}'

echo $#

for i in $(seq 1 $#) ; do
    echo "$i: ${!i}"
done

单元2输出:

代码语言:javascript
复制
3
1: 123
2:  with spaces 
 'asdf' $DOLLAR$$ $$SIGNS$$ 
3:  with spaces 
 asdf $DOLLAR$$ $$SIGNS$$ 

另外,脚本表单也是计时bash单元格的一种方便的方式:%%script time bash -s '{simple_var}' {tamed_var} '{crazy_var}'将是上面所述的替代。

这些文档是这里,但它们没有深入了解%%script的功能。但是,基于这种行为,jupyter将单元格的其余部分作为标准输入提供。这很有趣,因为它说“%脚本基本上是shebang",但事实并非如此(否则我们就不需要bash的-s了)。因此,在您的例子中,您用script pvpython替换了我上面使用的script pvpython魔术。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51732145

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档