У меня есть скрипты Python для запуска на разных компьютерах. Чтобы избежать проблем с разными путями и именами файлов, я создал определенные файлы конфигурации (DConfig, AConfig и MConfig) и еще один сценарий, который решает, какую конфигурацию использовать. Это работает, но я думаю, есть способы сделать это лучше. Любые идеи?
import os
import socket
hostname_K = 'DESKTOP-K'
hostname_A = 'A'
hostname_M = '' # hostname not known for sure
print("start config")
print("cwd: ", os.getcwd())
print("os: ", os.name)
# print(os.getlogin()) # Doesn't work on non-posix
hostname = socket.gethostname()
if hostname == hostname_K:
import DConfig as Conf
elif hostname == hostname_A:
import AConfig as Conf
else:
print("Hostname: {}, guess we are on M".format(hostname))
import MConfig as Conf
dirData = Conf.dirData
dirScript = Conf.dirScript
pathDB = Conf.pathDB
print("config done.")
Как это используется другими скриптами:
import config
XMLFILE = config.dirData + 'Tags.xml'
DATABASE = config.pathDB
1 ответ
У вас есть ценность (hostname
в данном случае), который вы хотите использовать для выбора среди различных вариантов данных (в данном случае — модули конфигурации). В подобных ситуациях используйте структуру данных. Разумные данные всегда проще логики. Например, см. Правило 5. от Роба Пайка.
Иллюстрация, основанная на вашем коде:
import socket
import DConfig
import AConfig
import MConfig
configs = {
'host-D': DConfig,
'host-A': AConfig,
'host-M': MConfig,
}
hostname = socket.gethostname()
Conf = configs.get(hostname, MConfig)
Спасибо, выглядит намного лучше!
— klmr