我有一个名为“poc.py”的脚本,它采用一个位置命令行参数“inputfile.txt”。poc.py 脚本用于argparse
处理位置命令行参数,然后将 args dict 传递给main()
. 进入后main()
,我读取输入文件,进行一些处理,创建一个pandas DataFrame
,最后绘制数据。我在操作我的 DataFrame 和控制结果图的确切格式时遇到了困难,所以我想尝试 ipython 以交互方式探索它,看看我是否可以更好地掌握处理 pandas/matplotlib 的“pythonic”方法。
所以我尝试使用 ipython 并运行一个脚本,但我无法让 ipython 保留我的脚本的命名空间。
我试过这个:
$ ipython --pylab -i poc.py inputfile.txt
它可以很好地运行我的脚本,并显示绘图(即使没有阻塞plt.show()
调用),但是当脚本完成时,ipython who
andwhos
命令会说Interactive namespace is empty
. 同样,如果我首先进入 ipython shell,然后执行以下操作:
In [2]: run poc.py inputfile.txt
当脚本完成时(再次,大量输出,显示图)我得到相同的结果:一个空的交互式命名空间。
在理解如何运行外部和使用 ipython 以交互方式探索脚本中的数据/对象方面,我缺少什么?
这是我的脚本 ( poc.py
) 设置的简单示例:
import numpy as np
import matplotlib as plt
import pandas as pd
# etc ...more libraries and custom functions here...
def main(args):
data = np.genfromtxt(args.inputfile)
# (omitted)...more data processing / manipulation...
pdata = pd.DataFrame(data)
# (omitted)...more data processing / manipulation...
plt.plot(pdata)
# (omitted)...some formatting of the matplotlib/axes/figure objects
plt.show()
if __name__ == '__main__':
parser = argparse.ArgumentParser(description='''some program...''')
parser.add_argument('inputfile', help='path to input file')
args = parser.parse_args()
main(args)