簡體   English   中英

解析命令行參數不讀取所有參數?

[英]parse command line arguments not reading all arguments?

因此,盡管遇到了文檔問題,但我遇到了getopt模塊來解析命令行參數。 無論出於什么原因,我都無法弄清楚為什么看不到我的--domain example.com參數。

$ ./httpdsetup.py -a -u zack --domain example.com
[('-a', ''), ('-u', '')]

我打印出來什么獲取倒入opts來看看它看到的。 下面的代碼與文檔站點上的代碼完全相同。

def main(argv):
        import getopt

        try:
                opts, args = getopt.getopt(argv, "h:al:ud:v", ["user=", "apache", "lighttpd", "dir=", "domain=", "vhost="])
        except getopt.GetoptError:
                print_usage()
                sys.exit(2)

        username = ''
        directory = ''
        domain = ''

        httpd = 'apache'

        print(opts)

        for opt, arg in opts:
                if opt == '-h':
                        print_usage()
                        sys.exit()
                elif opt in ('-u', '--username'):
                        username = arg
                elif opt in ('-d', '--dir'):
                        directory = arg
                elif opt in ('-v', '--domain', '--vhost'):
                        domain = arg
                elif opt in ('-a', '--apache'):
                        httpd = 'apache'
                elif opt in ('-l', '--lighttpd'):
                        httpd = 'lighttpd'
                else:
                        print_usage()
                        sys.exit()

        if httpd == 'apache':
                create_apache_vhost(domain, directory, username)
        elif httpd == 'lighttpd':
                create_lighty_vhost(domain, directory, username)

if __name__ == '__main__':
        main(sys.argv[1:])

我更喜歡argparse Python文檔在這里 在Python> = 2.7和> = 3.2中使用,但在Python 3.0和3.1中則沒有。 如果安裝中缺少該文件 ,只需將單個文件從此處復制到腳本所在的位置,或復制到Python安裝中。

這很接近您使用argparse的示例:

#!/usr/bin/env python3

import sys



def create_apache_vhost(*args, **kwargs):
    pass

def create_lighty_vhost(*args, **kwargs):
    pass

def main(argv):
        import argparse

        parser = argparse.ArgumentParser(description="Some server",
                                         formatter_class=argparse.RawDescriptionHelpFormatter)

        parser.add_argument('--username', type=str)
        parser.add_argument('-u', dest='username', type=str)

        parser.add_argument('--apache', dest='httpd', action='store_const', const='apache')
        parser.add_argument('-a',       dest='httpd', action='store_const', const='apache')
        parser.add_argument('--lighthttpd', dest='httpd', action='store_const', const='lighthttpd')
        parser.add_argument('-l',           dest='httpd', action='store_const', const='lighthttpd')

        parser.add_argument('--domain', type=str)
        parser.add_argument('--vhost',  type=str)
        parser.add_argument('-v', dest='domain', type=str)

        parser.add_argument('--dir', dest='directory', type=str)
        parser.add_argument('-d', dest='directory', type=str)

        defaults = {
            'httpd': 'apache',
            }
        parser.set_defaults(**defaults)

        args = parser.parse_args(args=argv)

        print(args)

        if args.httpd == 'apache':
                create_apache_vhost(args.domain, args.directory, args.username)
        elif args.httpd == 'lighttpd':
                create_lighty_vhost(args.domain, args.directory, args.username)

if __name__ == '__main__':
        main(sys.argv[1:])

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM