从python脚本运行交互模式

时间:2019-06-21 16:43:03

标签: python

由于我不知道交互式python模式的真正含义,所以我的问题可能很愚蠢。但是我仍然想问。

我想要一个可以初始化对象然后运行交互式python模式的python脚本。

它的行为如下:

$ cat myscript.py
#!/usr/bin/env python3
import argparse

parser = argparse.ArgumentParser()
parser.add_argument("-i", action='store_true')
args = parser.parse_args()

if args.i:
    foo = 'bar'
    run_interactive_mode()
$ ./myscript.py -i
>>> foo
'bar'
>>>

有解决方案吗?

2 个答案:

答案 0 :(得分:1)

您真的很亲密,但是我认为您对此太想了。 Python已经有一个-i标志。参见Python3 Docs。从文档中:

  

当脚本作为第一个参数传递时,在执行脚本或命令后进入交互模式

根据您的情况,摆脱argparse并根据需要创建变量。脚本运行完毕后,交互式终端将打开,并允许您与在脚本执行期间创建的变量进行交互

例如:

#!/usr/bin/env python3
foo = "bar"

$ python -I myscript.py
>>> foo
'bar'
>>>

答案 1 :(得分:1)

是-使用code模块:

import argparse

parser = argparse.ArgumentParser()
parser.add_argument("-i", action='store_true')
args = parser.parse_args()

def fun():
    print("fun")

if args.i:
    foo = 'bar'
    import code
    code.interact(local={**globals(), **locals()})

并运行它:

λ python tmp.py -i
Python 3.6.5 |Anaconda, Inc.| (default, Apr 26 2018, 08:42:37)
[GCC 4.2.1 Compatible Clang 4.0.1 (tags/RELEASE_401/final)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
(InteractiveConsole)
>>> foo
'bar'
>>> fun()
fun