与此最相关的问题是:In Ipython, how can I pass arguments to a cell as though it were its own script?
我正在编写一个ipython笔记本进行模拟,然后在paraview中创建动画。我这样做的方法是使用魔术命令运行一个单元格
%%script pvpython
因为paraview有自己的解释器。问题是我需要它将vtu文件的目录作为参数传递给它(这是IPython内核中的变量)。到目前为止,我还无法弄清楚这一点。我尝试过:
%%script pvpython path/to/files
import argparse
parser = argparse.ArgumentParser()
parser.add_argument('foo')
args = parser.parse_args()
print(args.foo)
但是这会导致错误:`得到了未知的参数:path / to / files,因为该参数被传递给了magic命令而不是python脚本。有办法解决这个问题吗?
编辑:这与链接的问题不同,因为我使用的是单元魔术而不是线魔术。我希望我的所有代码都可以在笔记本中单独看到。
答案 0 :(得分:0)
我不完全记得在哪里找到它的,而且似乎也没有记载,但这对于细胞魔术来说是非常有用的功能。
这不是python格式化机制,它是与!
开头的行魔术插值中使用的jupyter插值相同。请注意,粗体引用变量中没有引号。
单元格1:
simple_var = 123
crazy_var = " with spaces \n 'asdf' $DOLLAR$$ $$SIGNS$$ "
import shlex
tamed_var = shlex.quote(crazy_var)
单元2:
%%bash -s '{simple_var}' {tamed_var} '{crazy_var}'
echo $#
for i in $(seq 1 $#) ; do
echo "$i: ${!i}"
done
单元2的输出:
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}'
将是上面的替代方法。
文档是here,但它们没有深入研究%%script
的作用。但是,基于此行为,看起来jupyter会将单元格的其余部分作为标准输入。这很有趣,因为它说“ %% script基本上是shebang”,而不是这种情况(否则我们不需要bash的-s
)。因此,在您的情况下,您可以将我上面使用的bash -s
替换为script pvpython
。