У меня есть сценарий с именем «poc.py», который принимает один аргумент командной строки «inputfile.txt». Сценарий poc.py использует argparse
для обработки аргумента командной строки позиционирования, а затем передает аргументы args main()
. Однажды в main()
, я прочитал входной файл, сделаю некоторую обработку, создаю pandas DataFrame
и, наконец, построю данные. Мне трудно манипулировать моим DataFrame и контролировать точное форматирование полученного графика, поэтому я хотел бы попробовать ipython, чтобы изучить это в интерактивном режиме и посмотреть, могу ли я лучше понять «pythonic» способы обработки pandas/matplotlib.python, ipython запустить интерактивный скрипт
Итак, я попытался поэкспериментировать с ipython и запустить скрипт, но я не могу заставить ipython сохранять пространство имен моего скрипта.
Я попытался это:
$ ipython --pylab -i poc.py inputfile.txt
который работает мой сценарий просто отлично, и отображает графики (даже без блокировки plt.show()
вызова), но когда сценарий закончен, команды ipython who
и whos
говорят Interactive namespace is empty
, Точно так же, если я сначала введите IPython оболочку, а затем сделать:
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)
Ваш модуль не имеет ничего в своем пространстве имен, кроме 'np',' plt', 'pd',' main', 'parser' и' args'. В частности, 'data' и' pdata' являются локальными переменными из уже завершенного вызова функции. Ваша проблема в том, что вы не можете увидеть 'pd' без повторного импорта или что' args' отсутствует? Или что вы не видите 'data' и' pdata'? – abarnert
Я хотел бы видеть 'data' и' pdata'. Поэтому я предполагаю, что я хочу как-то отключить IPython до выхода из main() '? – tbc
Ну, если Python останавливается перед выполнением 'main', эти значения даже не будут созданы. Но если это то, что вы хотите, это легко: просто «импортируйте» модуль вместо его запуска; то вы можете называть «главное» на досуге (и помещать точки останова отладчика или что-то еще). – abarnert