在ipython

时间:2016-03-07 22:00:13

标签: python ipython

我们如何启动ipython REPL并指示它将一些命令行参数传递给底层的python解释器?

例如,我们可以使用

打开一个增加详细程度的python REPL
python -v

但是在打开ipython时我无法看到如何通过那个标志。

3 个答案:

答案 0 :(得分:5)

我说最好的方法是用python显式启动ipython

python /usr/bin/ipython

因为ipython可执行文件只是一个python脚本;或者你可以通过告诉python加载ipython库来启动ipython

python -m IPython.frontend.terminal.ipapp

然后你可以添加所有本机python参数:

python -v /usr/bin/ipython
python -v -m IPython.frontend.terminal.ipapp

HTH

答案 1 :(得分:1)

您可以编写自己的<!DOCTYPE html> <html> <body> <p id="demo"></p> <script> var txt = "id=126e-90:vj=34566f:ff=1998452"; var indexColon = txt.indexOf(':'); //find index of ':' var indexEqual = txt.indexOf('=') + 1; //find index of '=' var rez = txt.substring(indexEqual ,indexColon); document.getElementById("demo").innerHTML = rez; </script> </body> </html> shebang脚本。

我在这里复制了ipython脚本并添加了ipython

-v

现在,当我执行#!/usr/local/bin/python3.5 -v # -*- coding: utf-8 -*- import re import sys from IPython import start_ipython if __name__ == '__main__': sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0]) sys.exit(start_ipython()) 时,我会在启动和关闭时获得许多./vipython个信息。

我从其他SO问题中收集到,我可能无法为这样一个shebang线添加多个选项。

How to use multiple arguments with a shebang (i.e. #!)?

所以例如

import

有效,但

#!/usr/local/bin/python3.5 -vv

没有 - 它给了我

#!/usr/local/bin/python3.5 -v -v

答案 2 :(得分:0)

-v选项会影响解释器本身的行为,而不仅仅是REPL。无论是否添加-i选项,都可以获得额外的导入信息。

这是启动ipython(或至少一个版本)的默认脚本

1522:~/mypy$ cat /usr/local/bin/ipython3.5
#!/usr/local/bin/python3.5

# -*- coding: utf-8 -*-
import re
import sys

from IPython import start_ipython

if __name__ == '__main__':
    sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
    sys.exit(start_ipython())

并在ipython会话中:

In [1153]: from IPython import start_ipython
In [1154]: start_ipython??
String form: <function start_ipython at 0xb697edac>
File:        /usr/lib/python3/dist-packages/IPython/__init__.py
Definition:  start_ipython(argv=None, **kwargs)
Source:
def start_ipython(argv=None, **kwargs):
   "..."
   from IPython.terminal.ipapp import launch_new_instance
    return launch_new_instance(argv=argv, **kwargs)

最终将argv传递给argparse解析器。 Ipython使用从其配置文件派生的参数填充该解析器。因此,您可以使用多个选项来设置参数 - 默认配置,配置文件配置和命令行。但所有这一切都是在翻译推出之后。有些事情与解释器REPL相同,但不是全部(-m,而不是-v)。

-v被用作zmo建议时,我们会看到ipython代码的所有导入 - 这些代码很少。您是否对这些内容感兴趣,或者您对与您自己的脚本相关的导入更感兴趣?

我经常使用ipython来测试答案,尤其是numpy。实际上,我的默认ipython调用具有--pylab标记。但是为了测试独立脚本我使用普通python(通常在我的编辑器中从终端窗口调用)。有时虽然我%run来自ipython内的脚本。这会将模块加载到主工作区,从而可以轻松地对函数执行%timeit测试。

其他ipython脚本使用

#!/usr/bin/python
import sys
from pkg_resources import load_entry_point
if __name__ == '__main__':
    sys.exit(
        load_entry_point(...)

我不会使用这种风格编写很多代码,但我不知道这种启动如何通过argv传递给解释器。当模块加载并开始运行时,解释器已经在运行。

通常看起来ipython处理-i-m-c等选项的方式基本上与常规python相同。它可以使用自己的代码,而不是委托给解释器。但-v-O-t等内容适用于解释器,而不适用于REPL,并且不会由ipython代码处理。