Mã hiện tại của tôi trông giống như thế này. Nó cho phép tôi phân tích cú pháp nhiều tham số mà kịch bản chương trình của tôi nhận được. Có cách nào khác gần hơn với 'các phương pháp hay nhất' không? Tôi đã không nhìn thấy mã thực sự bằng cách sử dụng đầu ra của argparse
, chỉ làm thế nào để thiết lập nó.Sử dụng đầu ra argparse cho các chức năng gọi
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()
Trong trường hợp nào đây sẽ là phương pháp tốt nhất? Tôi không thể nhìn thấy một sử dụng cho tất cả các mã phụ. Nhưng sau đó một lần nữa, tôi hầu như không sử dụng lớp học vì vậy tôi có thể thiếu một cái gì đó. – avacariu
@vlad, nó có thể được sử dụng để tự động gọi một hàm khi đối số được cung cấp, đó là những gì bạn đang làm sẽ tất cả các bản mẫu của bạn - bạn chỉ cần thực hiện các hàm là phương thức '__call__' của các lớp con thích hợp của 'argparse.Action'. Nhưng nếu bạn không "có được" lập trình hướng đối tượng, thì OK, bạn có thể làm theo cách của bạn (mặc dù vòng lặp đó và 'if x ==' kiểm tra thực sự dư thừa trong mọi trường hợp - chỉ cần thực hiện sau khi kiểm tra khác đối với những đối số nào hiện diện có thể đi theo các cuộc gọi thích hợp, không có giá trị gia tăng nào trong bản mẫu khác mà bạn sử dụng). –
Đã chấp nhận câu trả lời này vì câu trả lời cho câu hỏi của tôi. Tôi * có thể * sẽ kết thúc việc này để tìm hiểu cách nó hoạt động; nhưng nó sẽ đòi hỏi nhiều thay đổi trong cách mã của tôi hiện đang hoạt động (đặc biệt là các hàm được liệt kê ở đó). Cảm ơn! – avacariu