在Ipython中处于交互模式时,sys.argv不同
当我在交互模式下使用Ipython运行脚本时,执行的交互部分中的在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",
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本身使用的任何选项)