Вопрос
Первый скрипт Python, и я получаю ошибку, которую я не могу обойти, используя файл конфигурации.Первая часть сценария принимает пользовательский ввод и без проблем помещает его в базу данных MySQL. Затем я перехожу к работе файловой системы, и все идет немного грушевидно. Я могу заставить ее работать без использования параметров файла конфигурации, но Я хотел бы сохранить его согласованность и извлечь из этого файла:
vshare = str(raw_input('Share the user needs access to: '))
vrights = str(raw_input('Should this user be Read Only? (y/n): '))
f = open("%s/%s" % (config['vsftp']['user_dir'], (vusername), 'wr'))
#f = open("/etc/vsftpd_user_conf/%s" % (vusername) , 'wr' )
f.write("local_root=%s/%s" % (config['vsftp']['local_root_dir'], vshare))
if vrights.lower() in ['y', 'ye', 'yes']:
buffer = []
for line in f.readlines():
if 'write_enable=' in line:
buffer.append('write_enable=NO')
else:
buffer.append(line)
f.writelines(buffer)
f.close()
Ошибка, которую я получаю:
TypeError: not all arguments converted during string formatting
Если я раскомментирую закомментированную строку, она сработает, продвинется дальше и выдаст ошибки. Но я разберусь с этим, как только разберусь с этой проблемой. Спасибо за любой вклад.
Решение
Ваш кортеж имеет неправильную форму
f = open("%s/%s" % (config['vsftp']['user_dir'], (vusername), 'wr'))
Должно быть
f = open("%s/%s" % (config['vsftp']['user_dir'], (vusername)), 'wr')
Другие советы
Ошибка здесь:
open("%s/%s" % (config['vsftp']['user_dir'], (vusername), 'wr'))
У вас есть три параметра, но в строке только два %s.Вы, наверное, хотели сказать:
open("%s/%s" % (config['vsftp']['user_dir'], vusername), 'wr')
Хотя слово «wr» неясно, вы, вероятно, имеете в виду w+ или r+.
f = open("%s/%s" % (config['vsftp']['user_dir'], (vusername), 'wr'))
Вы передаете три аргумента (config['vsftp']['user_dir'], (vusername), 'wr') в строку формата, ожидающую два:"%SS".Таким образом, ошибка сообщает вам, что в строке формата есть аргумент, который не используется.
Я думаю, что у вас неправильная скобка, ваша строка должна быть такой:
f = open("%s/%s" % (config['vsftp']['user_dir'], (vusername)), 'wr')
Похоже, эта строка должна быть:
f = open("%s/%s" % (config['vsftp']['user_dir'], vusername), 'wr')
(Я передвинул закрывающую скобку.)