optparse 不收集传递给选项的所有值

optparse doesn't collect all values passed to an option

我正在开发一个简单的端口扫描器,我希望我的程序在被命令 shell 执行时采用两个选项。一般来说,它只能从 shell 执行,因为程序绝对需要这些选项。

我希望选项是:

-H:主机IP地址

-p: 应扫描的所有端口列表

这是我的问题:我希望端口用逗号和空格分隔,就像这个启动我的程序的例子一样:

D:\LocalUser\MyPython\Portscanner>C:\Users\LocalUser\AppData\Local\Programs\Pytho n\Python35-32\python.exe portscanner_v0.0.py -H 192.168.1.1 -p 21, 1720, 8000

不幸的是,它们似乎并没有被我的程序全部收集,只有第二个选项的第一个值被读取到我的代码中的变量中。我正在使用 optparse 和 Python 3.5,请告诉我如何从 shell.

获取所有端口

这是我的代码:

def portScan(tgtHost, tgtPorts):
    #doing my port scans
    #wont show my actual code here, it's working fine


def main():
    parser = optparse.OptionParser('usage%prog ' + ' -H <target host> -p <target port>')
    parser.add_option('-H', dest='tgtHost', type='string', help='specify target Host')
    parser.add_option('-p', dest='tgtPort', type='string', help='specify target port[s] separated by comma')
    (options, args) = parser.parse_args()
    tgtHost = options.tgtHost
    tgtPorts = str(options.tgtPort).split(', ')
    if ((tgtHost == None) | (tgtPorts[0]==None)):
        print(parser.usage)
        exit(0)
    portScan(tgtHost, tgtPorts)

if __name__ == "__main__":
    main()

参数已经被空格分割,所以你需要使用

tgtPorts = str(options.tgtPort).split(',')

并将其命名为 python.exe portscanner_v0.0.py -H 192.168.1.1 -p 21,1720,8000

另请注意 optparse 模块 is deprecated since Python 2.7 and replaced by argparse