Уведомления

Группа в Telegram: @pythonsu

#1 Дек. 19, 2018 21:33:58

temzza
Зарегистрирован: 2018-12-19
Сообщения: 7
Репутация: +  0  -
Профиль   Отправить e-mail  

в чем ошибка в скрипте?

Хочу спросить на счет данной ошибки, из за чего она возникает, его я ошибся или совсем что то не верно(что скорее всего). Суть задачи скрипта = есть конфиг, в него надо вносить изменения пользователем через input. Нужно чтобы была проверка на параметры в которых только путь до папки, и только да\нет можно написать (+ еще скорее всего надо для параметров только с цифрами сделать проверку, но я пока незнаю как, если будет оказана помощь еще и в этом, буду очень благодарен). Дак вот я сделал функция на проверку имеется ли папка в системе, создал словарь со всеми параметрами и их значениями (если делать только для проверки папки, все работает хорошо, проблема именно в параметрами да\нет). Вот собственно говоря суть проблемы, спасибо заранее добрым людям которые помогут) Скриншот конфига и сам код скрипта приложены с посту.

 # -*- coding: utf-8 -*-
import os
path = '/test3.conf'
name1 = input('what setting you to change? ')
value1 = input('what you want to change in this setting: ')
def set_parametrs(name1, value1):
    with open(path) as f:
        current_config = f.read().splitlines()
    for i, option in enumerate(current_config):
        if option.split("=")[0].strip() == name1:
            current_config[i] = '%s = %s' % (name1, value1)
    with open(path, 'w') as f:
        f.write('\n'.join(current_config))
        f.close()
def check_dir():
    if os.path.isdir(value1):
        print('we have this dir')
        return True
    else:
        print('we dont have this dir')
        return False
def check_yes_no():
    for key, value in d.items():
        if name1 == key and value1 in d[key]:
            print('this parametr is valid')
            return True
    else:
        print('this parametr is invalid')
    return False
d = {
    'backup_destination_automake': ('yes', 'no'),
    'backup_destination_prefix': ('yes', 'no'),
    'backup_schedule': ('yes', 'no'),
    'backup_keep_on_errors': ('yes', 'no'),
    'method_rsync_sudo': ('yes', 'no'),
    'method_rsync_differential': ('yes', 'no'),
    'method_verify': ('yes', 'no'),
    'method_device_eject': ('yes', 'no'),
    'report_remote_uri_down': ('yes', 'no'),
    'report_stdout': ('yes', 'no'),
    'report_stdout_on_errors': ('yes', 'no'),
    'report_email': ('yes', 'no'),
    'report_email_on_errors': ('yes', 'no'),
    'report_email_rcpt': ('yes', 'no'),
    'report_html': ('yes', 'no'),
    'report_html_on_errors': ('yes', 'no'),
    'report_html_logo': ('yes', 'no'),
    'backup_source': check_dir,
    'backup_destination': check_dir,
    'backup_exclude': check_dir
}
'''param_dir = {
    'backup_source': check_dir,
    'backup_destination': check_dir,
    'backup_exclude': check_dir
}'''
if name1 and value1 and d[name1]:
    set_parametrs(name1, value1)
elif check_yes_no:
    set_parametrs(name1, value1)
else:
        print("bad")/code]

Отредактировано temzza (Дек. 20, 2018 00:27:14)

Прикреплённый файлы:
attachment test3.conf (5,5 KБ)

Офлайн

#2 Дек. 20, 2018 00:08:16

vic57
Зарегистрирован: 2015-07-07
Сообщения: 913
Репутация: +  127  -
Профиль  

в чем ошибка в скрипте?

 if name1 and value1 and d[name1](): # ???
    set_parametrs(name1, value1)
elif check_yes_no:
    set_parametrs(name1, value1)
else:
        print("bad")
 Traceback (most recent call last):
  File "conf3.py", line 55, in <module>
    if name1 and value1 and d[name1]():
NameError: name 'name1' is not defined
а где определяются name1, value1 ?
и еще
 if name1 in d and d[name1] == value1 

Отредактировано vic57 (Дек. 20, 2018 00:11:11)

Офлайн

#3 Дек. 20, 2018 00:23:13

temzza
Зарегистрирован: 2018-12-19
Сообщения: 7
Репутация: +  0  -
Профиль   Отправить e-mail  

в чем ошибка в скрипте?

vic57
прощу прощение, начало кода не скопировал
 # -*- coding: utf-8 -*-
import os
path = '/Users/test/test3.conf'
name1 = input('what setting you to change? ')
value1 = input('what you want to change in this setting: ')

Офлайн

#4 Дек. 20, 2018 00:32:12

temzza
Зарегистрирован: 2018-12-19
Сообщения: 7
Репутация: +  0  -
Профиль   Отправить e-mail  

в чем ошибка в скрипте?

vic57
обновил начальный пост, добавил начало+убрал ()
а эта строчка ->
 if name1 in d and d[name1] == value1 
где именно должна быть? в конечном условии? Просто у меня там стоит
 if name1 and value1
просто чтобы нельзя было пустыми их оставлять, а дальше через and уже остальное

Офлайн

#5 Дек. 20, 2018 01:01:06

vic57
Зарегистрирован: 2015-07-07
Сообщения: 913
Репутация: +  127  -
Профиль  

в чем ошибка в скрипте?

зачем так?
если ты хочешь изменить параметр то

 d = {
    'backup_destination_automake': ('yes', 'no'),
    'backup_destination_prefix': ('yes', 'no'),
    'backup_schedule': ('yes', 'no'),
    'backup_keep_on_errors': ('yes', 'no'),
    'method_rsync_sudo': ('yes', 'no'),
    'method_rsync_differential': ('yes', 'no'),
    'method_verify': ('yes', 'no'),
    'method_device_eject': ('yes', 'no'),
    'report_remote_uri_down': ('yes', 'no'),
    'report_stdout': ('yes', 'no'),
    'report_stdout_on_errors': ('yes', 'no'),
    'report_email': ('yes', 'no'),
    'report_email_on_errors': ('yes', 'no'),
    'report_email_rcpt': ('yes', 'no'),
    'report_html': ('yes', 'no'),
    'report_html_on_errors': ('yes', 'no'),
    'report_html_logo': ('yes', 'no'),
    'backup_source': check_dir,
    'backup_destination': check_dir,
    'backup_exclude': check_dir
}
'''param_dir = {
    'backup_source': check_dir,
    'backup_destination': check_dir,
    'backup_exclude': check_dir
}'''
for k,v in d.items():
    s = input(k + '|'.join(v) + '  (y/n/q[uit])?:')
    if s == 'y':
        d[k] = 'yes'
    elif s == 'n':
        d[k] = 'no'
    elif s =='q':
        break
    else:
        continue
    

Офлайн

#6 Дек. 20, 2018 05:42:50

temzza
Зарегистрирован: 2018-12-19
Сообщения: 7
Репутация: +  0  -
Профиль   Отправить e-mail  

в чем ошибка в скрипте?

vic57
зачем так?если ты хочешь изменить параметр то
спасибо за способ) но я хотел уточнить, обязательно чтобы была проверка как когда меняю путь у папки, скрипт проверял что пишет именно путь, и также с да\нет, только да нет, и только для тех вариантов которым надо да нет.
Я может быть не правильно понял, но в вашем варианте я смогу сделать да\нет и у тех параметров которым нужен путь к папке.

p.s спасибо за помощь, буду рад если объясните, может я что то не так понял)

Офлайн

#7 Дек. 20, 2018 13:22:32

vic57
Зарегистрирован: 2015-07-07
Сообщения: 913
Репутация: +  127  -
Профиль  

в чем ошибка в скрипте?

ну в таком случае раздели проверку параметров типа yes/no и типа path на два разных цикла
в консоли ты просто запутаешься

Офлайн

#8 Дек. 20, 2018 13:34:25

temzza
Зарегистрирован: 2018-12-19
Сообщения: 7
Репутация: +  0  -
Профиль   Отправить e-mail  

в чем ошибка в скрипте?

vic57
ну в таком случае раздели проверку параметров типа yes/no и типа path на два разных циклав консоли ты просто запутаешься
То что запутаюсь это не слишком страшно, главное задача чтобы работала правильно проверка на правильность указания параметра. Чтобы для одних параметров только да\нет, а для других только путь

Офлайн

#9 Дек. 20, 2018 13:38:12

vic57
Зарегистрирован: 2015-07-07
Сообщения: 913
Репутация: +  127  -
Профиль  

в чем ошибка в скрипте?

вот и раздели

 d1 = {
    'backup_destination_automake': ('yes', 'no'),
    'backup_destination_prefix': ('yes', 'no'),
    'backup_schedule': ('yes', 'no'),
    'backup_keep_on_errors': ('yes', 'no'),
    'method_rsync_sudo': ('yes', 'no'),
    'method_rsync_differential': ('yes', 'no'),
    'method_verify': ('yes', 'no'),
    'method_device_eject': ('yes', 'no'),
    'report_remote_uri_down': ('yes', 'no'),
    'report_stdout': ('yes', 'no'),
    'report_stdout_on_errors': ('yes', 'no'),
    'report_email': ('yes', 'no'),
    'report_email_on_errors': ('yes', 'no'),
    'report_email_rcpt': ('yes', 'no'),
    'report_html': ('yes', 'no'),
    'report_html_on_errors': ('yes', 'no'),
    'report_html_logo': ('yes', 'no')
}
 d2 = {   
    'backup_source': check_dir,
    'backup_destination': check_dir,
    'backup_exclude': check_dir
}

Офлайн

#10 Дек. 20, 2018 13:44:51

temzza
Зарегистрирован: 2018-12-19
Сообщения: 7
Репутация: +  0  -
Профиль   Отправить e-mail  

в чем ошибка в скрипте?

vic57
вот и раздели
я пробовал делать с . разделением , но видимо тоже где то накосячил
 # -*- coding: utf-8 -*-
import os
path = '/test3.conf'
name1 = input('what setting you to change? ')
value1 = input('what you want to change in this setting: ')
def set_parametrs(name1, value1):
    with open(path) as f:
        current_config = f.read().splitlines()
    for i, option in enumerate(current_config):
        if option.split("=")[0].strip() == name1:
            current_config[i] = '%s = %s' % (name1, value1)
    with open(path, 'w') as f:
        f.write('\n'.join(current_config))
        f.close()
def check_dir():
    if os.path.isdir(value1):
        print('we have this dir')
        return True
    else:
        print('we dont have this dir')
        return False
d = {
    'backup_destination_automake': ('yes', 'no'),
    'backup_destination_prefix': ('yes', 'no'),
    'backup_schedule': ('yes', 'no'),
    'backup_keep_on_errors': ('yes', 'no'),
    'method_rsync_sudo': ('yes', 'no'),
    'method_rsync_differential': ('yes', 'no'),
    'method_verify': ('yes', 'no'),
    'method_device_eject': ('yes', 'no'),
    'report_remote_uri_down': ('yes', 'no'),
    'report_stdout': ('yes', 'no'),
    'report_stdout_on_errors': ('yes', 'no'),
    'report_email': ('yes', 'no'),
    'report_email_on_errors': ('yes', 'no'),
    'report_html': ('yes', 'no'),
    'report_html_on_errors': ('yes', 'no'),
    'report_html_logo': ('yes', 'no'),
}
param_dir = {
    'backup_source': check_dir,
    'backup_destination': check_dir,
    'backup_exclude': check_dir
}
def check_yes_no():
    for key, value in d.items():
        if name1 == key and value1 in d[key]:
            print('this parametr is valid')
            return True
    else:
        print('this parametr is invalid')
    return False
'''if name1 and value1 and d[name1] == check_dir():
    set_parametrs(name1, value1)
elif check_yes_no():
    set_parametrs(name1, value1)
else:
        print("bad")'''
if name1 and value1 and param_dir[name1]() and name1 in d == check_yes_no():
    set_parametrs(name1, value1)
else:
    print("Bad input")

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version