使用argparse调用函数

时间:2011-02-19 13:03:11

标签: python function argparse

嘿伙计们,我在从argpars调用函数时遇到了问题。这是我的脚本的简化版本,这适用于打印我给出的任何值-s或-p

import argparse

def main():

    parser = argparse.ArgumentParser(description="Do you wish to scan for live hosts or conduct a port scan?")
    parser.add_argument("-s", dest='ip3octets', action='store', help='Enter the first three octets of the class C network to scan for live hosts')
    parser.add_argument("-p", dest='ip', action='store',help='conduct a portscan of specified host')

    args = parser.parse_args()

    print args.ip3octets
    print args.ip

然而,这对我来说在逻辑上相同会产生错误:

import argparse

def main():

    parser = argparse.ArgumentParser(description="Do you wish to scan for live hosts or conduct a port scan?")
    parser.add_argument("-s", dest='ip3octets', action='store', help='Enter the first three octets of the class C network to scan for live hosts')
    parser.add_argument("-p", dest='ip', action='store',help='conduct a portscan of specified host')

    args = parser.parse_args()

    printip3octets()
    printip()

def printip3octets():

    print args.ip3octets

def printip():

    print args.ip

if __name__ == "__main__":main()

有谁知道我哪里出错了?非常感谢!

2 个答案:

答案 0 :(得分:6)

相同,请参阅this question了解原因。

您有(至少)2个选项:

  1. args作为参数传递给您的函数
  2. args设为全局变量。
  3. 我不确定其他人是否同意,但我个人会将所有解析器功能移到if语句中,即主要看起来像:

    def main(args):
        printip3octets(args)
        printip(args)
    

答案 1 :(得分:2)

args是main()中的局部变量 - 您需要将其作为参数传递给其他函数使用它。

...
printip3octets(args)

def printip3octets(args):

    print args.ip3octets
...