2017-08-10 49 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