将python命令行参数发送到IPython
我们如何启动ipythonrepl并指示它将一些命令行参数传递给底层python解释器 例如,我们可以使用将python命令行参数发送到IPython,python,ipython,Python,Ipython,我们如何启动ipythonrepl并指示它将一些命令行参数传递给底层python解释器 例如,我们可以使用 python -v 但是在打开IPython时,我看不到如何传递该标志。我认为最好的方法是使用python显式启动IPython: python /usr/bin/ipython 因为ipython可执行文件只是一个python脚本;或者您可以通过告诉python加载ipython库来启动ipython: python -m IPython.frontend.terminal.ipap
python -v
但是在打开IPython时,我看不到如何传递该标志。我认为最好的方法是使用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该
-v
选项影响解释器本身的行为,而不仅仅是REPL。无论是否添加-i
选项,都会获得额外的导入信息
下面是启动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)
我没有使用这种风格编写太多代码,但我不知道这种初始化如何传递给解释器。当模块加载并开始运行时,解释器已在运行
一般来说,它看起来像是
ipython
处理-i
、-m
、-c
等选项,处理方式基本上与常规的python
相同。它可以使用自己的代码来完成,而不是委托给解释器。但是像-v
、-O
、-t
这样的事情适用于解释器,而不是REPL,并且不由ipython
代码处理。您可以编写自己的ipython
shebang脚本
在这里,我复制了我的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
时,我会在启动和关闭时获得许多页面的导入
信息
我收集了其他一些问题,所以我可能无法为这样的一个shebang行添加多个选项
比如说
#!/usr/local/bin/python3.5 -vv
有效,但是
#!/usr/local/bin/python3.5 -v -v
不,它给了我
1008:~/mypy$ ./vipython
Unknown option: -
usage: /usr/local/bin/python3.5 [option] ... [-c cmd | -m mod | file | -] [arg] ...
Try `python -h' for more information.
没有漂亮的方法来做到这一点,而且事实是,我不使用<代码> iPython < /Cord>,因为我认为一个配置良好(具有完成和帮助)的香草Python RePL是非常好的,并且正是我要使用的代码运行,所以没有惊喜,没有脚本和RePL之间的差异。从我的角度来看,ipython只是一个有时不会变得很丑陋的黑客☺在我看来,这只是一个shebang脚本问题。直接调用脚本时,解释器不使用
sys.argv
。顺便说一句,您可以在shebang行中添加解释器参数。必要时,您可以使用,例如PYTHONVERBOSE
。@ThomasK的注释解决了此问题!
#!/usr/local/bin/python3.5 -v -v
1008:~/mypy$ ./vipython
Unknown option: -
usage: /usr/local/bin/python3.5 [option] ... [-c cmd | -m mod | file | -] [arg] ...
Try `python -h' for more information.