Форум сайта python.su
16
Здравствуйте, пишу скрипт, который состоит из 2 модулей, в первом модуле описывается класс Project, который создает экземпляры классов таблиц проекта (Table1, Table2, Table3 и т.д.), находящихся во 2 модуле, производит некоторые действия с ними в цикле с помощью вызова их методов и записывает результаты в файлы. Т.е. при запуске программы пользователь видит список таблиц в консоли, вводит номера необходимых ему таблиц и по этому списку номеров программа производит вычисления таблиц и выводит в файлы результаты.
Основная часть данных для расчета таблиц берется из БД, но часть данных должна передаваться в программу непосредственно пользователем. Рассматриваю следующие способы передачи пользовательских данных:
Вариант 1 - параметры для каждой таблицы передаются через input'ы, т.е при создании экземпляра Table1 пользователь вводит данные необходимые для вычисления таблицы 1 и т.д.
Вариант 2 - создать третий модуль, где будут находиться данные для вычислений таблиц в виде переменных (заполняется пользователем перед запуском скрипта), и который импортируется в модуль с таблицами
Как правильно реализовать ввод необходимых данных пользователем? Argparse для этих целей не рассматриваю, так как пользовательских данных для расчета всех таблиц может быть довольно много
Офлайн
253
Есть очень много вариантов. Не очень ясно в чем у вас проблема. Стилю вашего интерфейса подойдет подход когда вы создаете файл со значениями по умолчанию, а затем вызываете текстовый редактор для этого файла. После закрытия редактора считываете файл и используете значения (если конечно пользователь не наколбасил)
import os import yaml import subprocess as sp nm="template_input.yaml" datadict={"a":1,"b":2} with open(nm,w) as f: yaml.dump(datadict,f) try: sp.check_call("vim {0}".format(nm),shell=1) with open(nm,r) as f: userinput = yaml.load(f) except: print("bad input") finally: os.remove(nm)
Отредактировано doza_and (Окт. 28, 2015 08:20:10)
Офлайн
16
Спасибо большое! Проблемы в общем-то и нет, в настоящее время каждая таблица считается отдельным скриптом, данные передаются через input'ы, начал объединять все в одну программу, вот и задумался, а какой же способ предпочтительнее использовать.
Отредактировано Stright (Окт. 28, 2015 08:34:05)
Офлайн