В настоящее время мой код выглядит так. Это позволяет мне анализировать несколько параметров, которые получает мой скрипт программы. Есть ли другой подход, который ближе к «лучшим практикам»? Я не видел код, фактически использующий вывод argparse
, только как его настроить.Использование вывода argparse для вызова функций
def useArguments():
x = 0
while x <= 5:
if x == 0:
if args.getweather != None:
getWeather(args.getweather)
if x == 1:
if args.post != None:
post(args.post)
if x == 2:
if args.custompost != None:
custompost(args.custompost)
if x == 3:
if args.list != None:
listAccounts(args.list)
if x == 4:
if args.add != None:
addAccount(args.add[0])
if x == 5:
if args.edit != None:
editAccount(args.edit[0])
x = x + 1
if __name__ == '__main__':
updateConfig()
parser = argparse.ArgumentParser(description='Post Yahoo weather to Twitter.', epilog="Report any bugs to [email protected]", prog='Program')
parser.add_argument('-a', '--add', nargs=1, help='Add a new account. Use the desired account name as an argument.')
parser.add_argument('-e', '--edit', nargs=1, choices=accountListSTR[:-1], help='Edit an account. Use the desired account name as an argument.')
parser.add_argument('-g', '--getweather', nargs='*', choices=accountListSTR, help='Get weather and post here. Specify account(s) as argument. Use "all" for all accounts. If you specify multiple accounts, separate by a space NOT a comma.')
parser.add_argument('-p', '--post', nargs='*', choices=accountListSTR, help='Post weather to Twitter. Specify account(s) as argument. Use "all" for all accounts. If you specify multiple accounts, separate by a space NOT a comma.')
parser.add_argument('-c', '--custompost', nargs=2, help='Post a custom message. Specify an account then type the message. Make sure you use "" around the message. Use "all" for all accounts.')
parser.add_argument('-l', '--list', action='store_const', const='all', help='List all accounts.')
parser.add_argument('--version', action='version', version='%(prog)s 0.3.3')
args = parser.parse_args()
useArguments()
В каких ситуациях это будет лучший метод? Я не вижу возможности использовать весь этот дополнительный код. Но опять же, я едва использовал Классы, поэтому я, вероятно, что-то пропустил. – avacariu
@ vlad, он может быть использован для автоматического вызова функции при подаче аргумента, что и делает то, что вы делаете, и все ваши шаблоны - вам просто нужно сделать эти функции «методами __call__» соответствующих подклассов 'argparse.Action'. Но если вы не «получите» объектно-ориентированное программирование, это нормально, вы можете сделать это по-своему (хотя этот цикл и «если x ==» проверки действительно избыточны в любом случае - просто один за другим проверяет для каких аргументов присутствуют, возможно, последователи соответствующих вызовов, в другом используемом шаблоне нет добавленной стоимости). –
Принял этот ответ, потому что он отвечает на мой вопрос. Я * могу * в конечном итоге попробовать это, чтобы узнать, как это работает; но это потребует много изменений в том, как работает мой код (особенно перечисленные там функции). Спасибо! – avacariu