我们如何启动ipython REPL并指示它将一些命令行参数传递给底层的python解释器?
例如,我们可以使用
打开一个增加详细程度的python REPLpython -v
但是在打开ipython时我无法看到如何通过那个标志。
答案 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
代码处理。