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。
我正在开发一个简单的端口扫描器,我希望我的程序在被命令 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。