0

在 IPython 中使用来自 QtConsole 的魔术函数 %edit 时,调用不会阻塞,也不会执行保存的代码。但是它确实保存了一个临时文件...

我认为这是由于 GUI 编辑器和不确定性而导致的预期行为,无论是什么原因都无法与子进程(pyZMQ?)进行通信。

您认为混合 %edit/%run 魔法的最佳方式是什么?

我不介意调用两个不同的命令(一个用于编辑,一个在我保存并且执行是安全的之后)。但是这些命令需要一种方法来同步这个目标文件位置,或者需要有人来持久化存储,并且可能需要某种粗略的可预测生成文件名的形式,以便您一次可以编辑多个文件并任意执行。会话持久性不是必须的。

自己写魔法有用吗?希望我们能尽快 %edit 宏,这样可以很好地使它工作。

4

2 回答 2

1

你应该能够做到%edit filename.py%run filename.py。由于技术原因,预计会有非阻塞行为,而 IIRC。不是不可逾越,但困难重重。

如果您愿意,您可以定义自己的魔法,欢迎改进。

希望我们能尽快 %edit 宏,这样可以很好地使它工作。

为此,也欢迎 PR。我想作为一种解决方法/选项,您可以%load macro将宏放在输入 n+1 上,对其进行编辑并重新定义,这可能是细胞魔术的一个很好的扩展%%macro macroname

于 2013-04-05T11:52:54.090 回答
0

如果您的输入中有一些可执行代码(来自 QtConsole),您可以键入

%edit 1-5

这会触发编辑器,创建一个临时文件(自动管理),并加载您的输入行。这几乎足够了,现在如何务实地检索该临时文件的名称?

我在 Stdout 上看到了 print 语句,但它对 QtConsole AFAIK 不可见。也许可以重定向标准输出以捕捉该行,但如果您使用标准输出做其他事情,这可能不是一个选择。

如果我可以检索刚刚创建的完整路径名,这将是小菜一碟。将它存放在一些魔法会知道如何找到它的地方。然后在准备好后发出后续命令,将名称从堆栈中弹出,将其加载到宏中,然后运行。所有这一切都有 2 个输入命令并且没有要记住的名称(除非您想再次查找并使用该宏,但对于 1 个镜头的东西......)

如何捕获或检索该临时文件的路径?

于 2013-04-09T08:29:36.453 回答