2

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?

0

2 Answers 2

7

It is not identical, see this question for explanation why.

You have (at least) 2 options:

  1. Pass the args as an argument to your function
  2. 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) 
Sign up to request clarification or add additional context in comments.

Comments

2

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 ... 

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.