пятница, 18 февраля 2011 г.

Передаем список опций функции

Решил тут поучить пейтона и перепейсать на нем reporebuild - чисто в качестве профилактики и изучения. В итоге долго мучился с getopt - не мог получить список пакетов для пересборки, или же параметр совсем не передавался и скрипт завершал свою работу. Без разных доков (коих я не смог найти, а на python.org зайти не мог по причине отвалившегося тырнета) я нащупал примерно это:


def main():
    try:
        opt, args = getopt.getopt(sys.argv[1:], "abcflh", ["all", "build", "cfgcheck", "fetch", "localbuild", "help"])
    except getopt.GetoptError, err:
        print colored ('Wrong option!', 'red')
        usage()
        sys.exit(255)
    for option, args in opt:
        if option in ("-a", "--all"):
            BuildAll()
        elif option in ("-b", "--build"):
            BuildFromAur(sys.argv[1:])
        elif option in ("-c", "--cfgcheck"):
            CfgCheck()
        elif option in ("-f", "--fetch"):
            FetchFromAur(sys.argv[1:])
        elif option in ("-h", "--help"):
            usage()
            sys.exit(0)
        elif option in ("-l", "--localbuild"):
            BuildFromLocal(sys.argv[1:])

Конечно, немного кривовато, но, по крайней мере, работает.

2 комментария:

  1. никак не могу понять - зачем юзать getopt, когда можно просто в цикле перебрать те же "if opt[i] in ("-a", "--all"):"?

    ОтветитьУдалить
  2. Самое интересное - что не хочет работать простой перебор :D Да и опять же - если работает, то не трожь. Дополнительной нагрузки все равно не создает такая обработка, так что IDC в данном случае.
    И как было написано - курил getopt самолично, на пейтонорг не заходилось :(

    ОтветитьУдалить