在Ipython中处于交互模式时,sys.argv不同

在Ipython中处于交互模式时,sys.argv不同,ipython,interactive,argv,Ipython,Interactive,Argv,当我在交互模式下使用Ipython运行脚本时,执行的交互部分中的sys.argv参数列表与脚本中的不同 这是一个错误,还是我做错了什么 谢谢 oskar@RR06:~$ cat test.py import sys print(sys.argv) temp = sys.argv oskar@RR06:~$ ipython -i test.py -- foo bar Python 2.7.6 (default, Jun 22 2015, 17:58:13) Type "copyright",

当我在交互模式下使用Ipython运行脚本时,执行的交互部分中的
sys.argv
参数列表与脚本中的不同

这是一个错误,还是我做错了什么

谢谢

oskar@RR06:~$ cat test.py
import sys
print(sys.argv)
temp = sys.argv

oskar@RR06:~$ ipython -i test.py -- foo bar
Python 2.7.6 (default, Jun 22 2015, 17:58:13) 
Type "copyright", "credits" or "license" for more information.

IPython 4.2.1 -- An enhanced Interactive Python.
?         -> Introduction and overview of IPython's features.
%quickref -> Quick reference.
help      -> Python's own help system.
object?   -> Details about 'object', use 'object??' for extra details.
['/home/oskar/test.py', 'foo', 'bar']

In [1]: temp
Out[1]: ['/home/oskar/test.py', 'foo', 'bar']

In [2]: sys.argv
Out[2]: ['/usr/local/bin/ipython', '-i', 'test.py', '--', 'foo', 'bar']

如果我只调用
ipython
,然后查看
sys.argv
,我会得到

In [3]: sys.argv
Out[3]: ['/usr/bin/ipython3']
您的
Out[2]
看起来是一样的—由shell和Python解释器提供的完整列表。请记住,我们正在使用
ipython
import运行Python会话:

#!/usr/bin/env python3
# This script was automatically generated by setup.py
if __name__ == '__main__':
    from IPython import start_ipython
    start_ipython()
/usr/bin/ipython3 (END)
但是看看ipython-h;在第一段中:

它执行文件并退出,传递 脚本的剩余参数,就像您指定了相同的参数一样 使用python命令。在传递参数之前,可能需要指定
--
以防止IPython尝试解析它们

所以这是明确的说

ipython -i test.py -- foo bar
成为(生效)-或作为以下内容运行:

python test.py foo bar
ipython
代码有一个解析器(作为子类
argparse
)处理许多不同的参数。但是它不能处理或遵循
--
的代码被放在一边,放在
test.py
看到的
sys.argv

但是显然,
sys.argv
并不是交互式会话的功能

我想你也会得到同样的效果

$ipython
In[0]: %run test.py foo bar
...
%run
保存当前的
sys.argv
,并使用
sys.argv=[filename]+args
构造一个新的。然后在运行
test.py
之后,它将恢复
sys.argv

这不是一个bug,您也没有做错任何事情——只是希望两个
sys.argv
相同。在普通Python shell中,两个
sys.argv
似乎是相同的(没有shell本身使用的任何选项)