Calling functions with argparse [duplicate]
I'm having issues calling functions from argpars. This is a simplified version of my script and this works, printing whatever value I give -s or -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
This however, which to me is logically identical produces errors:
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()
Does anyone know where I am going wrong?
It is not identical, see this question for explanation why.
You have (at least) 2 options:
- Pass the
args
as an argument to your function - Make
args
a global variable.
I'm not sure if others agree, but personally I would move all the parser functionality to be inside the if
statement, i.e, the main would look like:
def main(args):
printip3octets(args)
printip(args)
args
is a local variable in main() - you need to pass it as parameter to use it in other functions.
...
printip3octets(args)
def printip3octets(args):
print args.ip3octets
...
精彩评论