В вашем примере полного кода вы выполняете
with open("config.txt", "w") as json_file:# Open the file for writing
configurations = json.load(json_file) # Read the into the buffer
, что приведет к ошибке (невозможно прочитать из файла, открытого для записи) и усекают файл (как при открытии с помощью w
).
Вот почему вы получаете ошибку UnsupportedOperation и почему файл оказывается пустым.
Я предлагаю провести рефакторинг, чтобы у вас было два простых функции для чтения и записи файла конфигурации:
def read_config():
if os.path.isfile("config.txt"):
with open("config.txt", "r") as json_file:
return json.load(json_file)
return {}
def save_config(config):
with open("config.txt", "w") as json_file:
json.dump(config, json_file)
def scaleup(diff):
config = read_config()
slave_name_list = config.get("slave_names", [])
# ... modify things ...
config["slave_names"] = some_new_slave_name_list
save_config(config)
def scaledown(diff):
config = read_config()
slave_name_list = config.get("slave_names", [])
# ... modify things...
slave_name_list = list(set(slave_name_list) - set(slave_list))
config["slave_names"] = slave_name_list
save_config(config)
(В стороне, поскольку вы выполняете Docker управление контейнерами, рассмотрите возможность использования самих ярлыков контейнеров в качестве основных данных для вашего управления состоянием вместо отдельный файл, который легко может go рассинхронизировать c.)