Вызов функций с помощью argparse - PullRequest
1 голос
/ 19 февраля 2011

Эй, ребята, у меня проблемы с вызовом функций из 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 ]

6 голосов
/ 19 февраля 2011

Это не идентично, см. этот вопрос для объяснения почему.

У вас есть (как минимум) 2 варианта:

  1. Передайте args в качестве аргумента вашей функции
  2. Сделать args глобальной переменной.

Я не уверен, что другие согласны, но лично я бы переместил всю функциональность парсера так, чтобы он был внутри оператора if, т. Е. Main выглядел бы так:

def main(args):
    printip3octets(args)
    printip(args)
2 голосов
/ 19 февраля 2011

args является локальной переменной в main () - вам нужно передать ее в качестве параметра, чтобы использовать ее в других функциях.

...
printip3octets(args)

def printip3octets(args):

    print args.ip3octets
...
...