Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/339.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在交互模式和脚本模式之间交换数据?_Python - Fatal编程技术网

Python 在交互模式和脚本模式之间交换数据?

Python 在交互模式和脚本模式之间交换数据?,python,Python,假设在脚本_模式下运行一段代码并生成这样的数据: my_data = [1, 2, 3, 4] #please note this is output after running not data in script 现在我切换到控制台中调试代码。 我需要使用刚才生成的数据,而不能直接复制以避免胡言乱语的影响。 我的解决方案是首先在脚本模式下进行pickle,然后在交互模式下取消pickle: import os, pickle # change to the working director

假设在脚本_模式下运行一段代码并生成这样的数据:

my_data = [1, 2, 3, 4] #please note this is output after running not data in script
现在我切换到控制台中调试代码。 我需要使用刚才生成的数据,而不能直接复制以避免胡言乱语的影响。 我的解决方案是首先在脚本模式下进行pickle,然后在交互模式下取消pickle:

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.
带有5个命令的代码:

脚本模式

import pickle

with open('my_data','wb') as file:
        pickle.dump(my_data, file)
交互模式:

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.

如何以更少的步骤完成它?

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


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

如果在
/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())
内置函数支持动态执行Python代码。 内置函数返回当前全局字典。 这样,您就可以访问您的数据:

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

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

pip install IPython
然后在任何你想进入控制台的地方,只要

import IPython
在文件的顶部,使用:

IPython.embed()
你想去的地方

您可以在输入变量列表及其类型和值后键入“whos”。这很有用,但是是的,这应该对你有用。IPython是一个坚固的python外壳


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

你说的互动是指空闲吗?变量是可用的-我刚检查过。它是一个作用域变量吗?显示相关代码。我使用macOS的终端和atom编辑器。@aaron请阅读问题。显示变量作用域的相关代码。尝试使用
a=1
创建一个新文件,您应该会看到它是可访问的。不确定我是否理解您的问题,但是如果您使用标准python IDLE代替,您可以通过运行
%run-I script.py
轻松运行脚本并保留脚本中定义的对象(变量、函数、类等)。那么就没有必要腌制/拆开东西了。顺便说一句,我不是说jupyter(以前的“ipython笔记本”),但只需将ipython作为一个交互式shell。
$python3-我将_划分为_chapters.py
并调用
>>内容列表
名称错误:名称“内容列表”不是defined@DFK当我不知道什么是
divide_to_chapters.py
时,我不能做很多事情。py可以介绍一个博客,在短内容中指定频繁使用ipython?这是一个本系列文章将介绍使用IPython的一些基本知识,如果您想了解的话。否则,我不确定我是否理解你的问题。数据不是脚本,而是由实现生成的。