IPython脚本的命令行选项?

40

我经常被要求调试别人写的Python脚本。我希望将这些脚本发送给IPython,以便在脚本失败时它会进入IPython shell。

不幸的是,我找不到一种方式来发送脚本所需的命令行选项。

当我将脚本及其选项传递为:

ipython <script_name> <script_options>

是否有解决方案或解决方法?

5个回答

51
ipython -- sometest.py 1 2 3 4

2
它能够工作,但我在文档中找不到这个,你能告诉我在哪里可以找到相关的文档吗? - Daniel Sokolowski
4
为了在交互式 shell 中保持,可以使用 ipython -i -- sometest.py 1 2 3 4 语法。注意不要改变原意,使句子更加通俗易懂,同时不添加解释或其他内容。 - Daniel Sokolowski
3
请注意,'--' 是系统 shell 解释器的一个特性,而不是特定于 ipython shell 的特性。 - Antoine Gallix
如果您喜欢使用ipdb进行调试,您可以类似地使用ipython --pdb -- somtest.py 1 2 3 4 - SpinUp __ A Davis

32
ipython -i -c "%run test.py 1 2 3 4"

非常好!不幸的是,当它发生异常时,它会将我放回到操作系统命令行,而不是 IPython 提示符。有什么建议吗? - JS.
3
你可以直接启动ipython,然后运行"%run test.py 1 2 3 4"。 - dr jimbob
3
实际上,添加“-i”可以使其保留在shell中。 - dr jimbob
@jimbob 如果您不介意我问一下,您在哪里找到了“-i”选项?我在“ipython -help”和“http://ipython.scipy.org/doc/stable/html/interactive/reference.html”中都没有找到它。 - JS.
@JS 我只在 Python 的 man 手册中找到了这个选项(而不是 ipython):"-i 当脚本作为第一个参数传递或使用 -c 选项时,在执行脚本或命令后进入交互模式。它不会读取 $PYTHONSTARTUP 文件。当脚本引发异常时,这对于检查全局变量或堆栈跟踪非常有用。"有点沮丧的是它没有在 ipython 的手册中,但我尝试了一下,它确实有效。 - dr jimbob
注意:我在许多不同的机器上运行IPython。有些机器可以使用上述解决方案,而其他机器则不能。所有机器都报告“ipython -Version”为“0.10”。我还没有时间诊断这是为什么,但是像我一样不要被这个问题困扰(已经发生了几次)。如果在您的IPython设置中无法成功,请尝试另一个解决方案。 - JS.

5

我知道已经有一个被接受的解决方案,但在最近版本的ipython中,这种方法不起作用。以下是我使用的命令来运行带有--autoreload的tornado测试的剪切和粘贴。

ipython --c="%run test.py --autoreload"

这是使用 ipython .11。


1
简单的例子 这里

script.py

from sys import argv

script, first, second, third = argv

print "The script is called:", script
print "Your first variable is:", first
print "Your second variable is:", second
print "Your third variable is:", third

shell:

$ ipython script.py stuff things that
The script is called: ex13.py
Your first variable is: stuff
Your second variable is: things
Your third variable is: that

0

IPython的许多方面行为可以通过用户IPython配置文件中的设置进行控制,通常这些文件在 ~/.ipython/ 中。用户可以创建多个配置文件(profiles),每个配置文件具有不同的配置参数设置。每个配置文件都有单独的文件夹来存储其设置在.ipython文件夹中。默认配置文件在profile_default中,用于自定义行为的主要文件是ipython_config.py。默认情况下,它几乎全部被注释掉,注释行显示了配置变量及其默认设置。取消注释或插入行以更改行为。

要更改IPython在运行脚本结束时的行为,请使用:

c.TerminalIPythonApp.force_interact = True

然后当脚本结束(或引发异常)时,IPython将继续运行并呈现给您提示符。这与ipython -i的行为相同。

我在我的默认配置文件中使用此设置,因为这是我希望IPython始终如一的行为。如果对于您来说不是这种情况,则可以创建具有此行为的配置文件,仅在需要此行为时使用。或者继续使用(显然未记录的)-i选项。

IPython配置文档可在此处找到:IPython 配置简介 — IPython 文档,其中描述了force_interact选项:终端IPython选项 — IPython文档


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接