将python命令行参数发送到IPython

将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

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

例如,我们可以使用

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.