Python Forum
Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
getopt not working right
#1
I am brand new to python. I am trying to utilize getopt to parse some arguments, which kind-of works; however, if I don't pass an argument it doesn't hit the exception, spit out the usage, and exit. I wonder what I have wrong?

def usage():
  print(filename + ": " + "-h|--help -u|--url <url>")

try:
  opts, args = getopt.getopt(sys.argv[1:], 'hu:', ['help', 'url='])
except getopt.GetoptError:
  usage()
  sys.exit(3)

for opt, arg in opts:
  if opt in ('-h', '--help'):
    usage()
    sys.exit(0)
  elif opt in ('-u', '--url'):
    url = arg
  else:
    usage()
    sys.exit(3)
If, for example, I run the script without any arguments, it gets to my requests.get(url) line (not shown) and errors out:
# ./check_pods.py
Traceback (most recent call last):
  File "./check_pods.py", line 31, in <module>
    r = requests.get(url)
  File "/usr/lib/python3.4/site-packages/requests/api.py", line 70, in get
    return request('get', url, params=params, **kwargs)
  File "/usr/lib/python3.4/site-packages/requests/api.py", line 56, in request
    return session.request(method=method, url=url, **kwargs)
  File "/usr/lib/python3.4/site-packages/requests/sessions.py", line 474, in request
    prep = self.prepare_request(req)
  File "/usr/lib/python3.4/site-packages/requests/sessions.py", line 407, in prepare_request
    hooks=merge_hooks(request.hooks, self.hooks),
  File "/usr/lib/python3.4/site-packages/requests/models.py", line 302, in prepare
    self.prepare_url(url, params)
  File "/usr/lib/python3.4/site-packages/requests/models.py", line 366, in prepare_url
    raise MissingSchema(error)
requests.exceptions.MissingSchema: Invalid URL '': No schema supplied. Perhaps you meant http://?

This works, but unsure if there is a better way. Feel free to pipe in if you have a better method:

try:
  opts, args = getopt.getopt(sys.argv[1:], 'hu:', ['help', 'url='])
except getopt.GetoptError as err:
  usage()
  sys.exit(3)

if not opts:
  usage()
  sys.exit(3)

for opt, arg in opts:
  if opt in ('-h', '--help'):
    usage()
    sys.exit(0)
  elif opt in ('-u', '--url'):
    url = arg
  else:
    usage()
    sys.exit(3)
Reply
#2
argparse is easier to use and as far as I know is bug free, as well as well documented.
Please read: https://ttboj.wordpress.com/2010/02/03/g...-argparse/
Reply


Possibly Related Threads…
Thread Author Replies Views Last Post
  (TypeError: 'module' object is not callable) for getopt Module nnevarez 2 2,827 Jul-03-2020, 01:45 AM
Last Post: nnevarez
  getopt with tuple not working proper Frank123456 0 1,852 Aug-21-2019, 12:46 PM
Last Post: Frank123456
  Help with "getopt" module fastfusion 4 3,888 Apr-09-2017, 09:50 AM
Last Post: snippsat

Forum Jump:

User Panel Messages

Announcements
Announcement #1 8/1/2020
Announcement #2 8/2/2020
Announcement #3 8/6/2020