2017-08-10 50 views
4

假设运行在script_mode代码块,并产生这样的数据:在interactive_mode和script_mode之间交换数据?

my_data = [1, 2, 3, 4] #please note this is output after running not data in script 

现在我切换在控制台工作为调试代码。 我需要使用刚刚生成的数据,而不能直接复制,以避免乱码的影响。 我的解决办法是先腌在script_mode和unpickle它interactive_mode:5个命令

代码:

脚本模式

import pickle 

with open('my_data','wb') as file: 
     pickle.dump(my_data, file) 

Interactive_mode:

import os, pickle 
# change to the working directory 
os.chdir('~\..\') 
with open('my_data', 'rb') as file: 
     my_data = pickle.load(file) 
# my_data is finally loaded in console 
# then manipulate it on the console. 

怎么办它在更少的步骤?

+0

通过互动,你的意思是IDLE?该变量是可用的 - 我刚刚检查。 – aaron

+0

它是一个scoped变量吗?显示相关的代码。 – aaron

+0

我使用macOS的终端和原子编辑器。@ aaron请阅读问题。 –

回答

2

您可以使用-i选项运行该文件,如python -i your_file_name.py

这将首先运行您的文件,然后打开一个包含所有变量的交互式shell并准备好使用。

+0

'$ python3 -i divide_to_chapters.py'并调用'>>> content_list' NameError:name'content_list'没有定义 –

+0

@DFK当我不知道什么是'divide_to_chapters.py'时不能做太多 – Uriel

2

,如果你在/path/to/your/project目录,你必须在脚本your_script.py这样的:

my_data = [1, 2, 3, 4] 

如果要调试脚本在Python 2交互shell,你可以这样做:

$ python 
>>> execfile('/path/to/your/project/your_script.py') 

或者,使用Python 2 + 3方式:

>>> exec(open('/path/to/your/project/your_script.py').read(), globals()) 

内置函数exec()支持动态执行Python代码。 内置函数globals()返回当前全局字典。 这样,你可以访问您的数据:

>>> my_data 
[1, 2, 3, 4] 
+0

数据不在脚本中,它是由实现产生的。 –

1

就个人而言,我会用IPython的,只是:

pip install IPython 

然后任何你想去的拖放到一个控制台,只需

import IPython 

位于文件顶部并使用:

IPython.embed() 

你想在哪里下降。

你可以输入“whos”一旦你的变量列表的类型和值。这很有用,但是,这应该适合你。 IPython是一个坚实的python shell。

如果你更习惯于标准的pdb,你也可以使用ipdb。它也很好。

+0

可以介绍一个指定ipython在短内容中频繁使用的博客吗? –

+0

这是一个系列,应该涵盖一些使用IPython的基础知识,如果这就是你所追求的。否则,我不确定我是否理解你的问题。 http://ipython.readthedocs.io/en/stable/interactive/tutorial.html – Saedeas