2016-01-06 3 views
0

У меня проблемы с передачей параметров в мой скрипт. Командная строка запуска сценария: myscript.py -c Random Я использую getopt в моем коде (дано там), но этот код не перебирает аргументы, потому что позже в программе не определена вариация variant_company, где я пойти не так?скрипт python разбор нескольких аргументов

tested_company=None 
try: 
    opts, args = getopt.getopt(sys.argv[1:], "hc:i", ['help', 'company', 'info']) #first argument ignored because zabbix giving it and being useless 
except getopt.GetoptError as e: 
    print (e) 
    usage() 
    sys.exit(3) 
if not opts: 
    #print ('No options supplied, only updating the database') 
    print("3") 
    sys.exit(3) 
else: 
    for opt, arg in opts: 
     if opt in ('-h', '--help'): 
      usage() 
      sys.exit(0) 
     elif opt in ('-c', '--company'): 
      tested_company = arg 
     elif opt == '-i': 
      displayInfos=1 
+0

Что вы ожидаете от 'tested_company'? Он установлен на «Нет» на первой строке, а затем не переназначается в любой момент. – JCVanHamme

+0

он находится в «elif opt in ('-c', '--company'):« part, когда я указываю myscript.py -c XXXXXX, проверенная_компьютация должна быть XXXXXX, но это не – kuzko

+0

. Какова фактическая ошибка? Это из этого кода или что-то еще? – JCVanHamme

ответ

1

Опция переменной не может быть инициализирована и вызывается за пределами инструкции try. Любая конкретная причина, по которой вы не можете сделать следующее?

tested_company=None 
try: 
    opts, args = getopt.getopt(sys.argv[1:], "hc:i", ['help', 'company', 'info']) #first argument ignored because zabbix giving it and being useless 
    if not opts: 
     #print ('No options supplied, only updating the database') 
     print("3") 
     sys.exit(3) 
    else: 
     for opt, arg in opts: 
      if opt in ('-h', '--help'): 
       usage() 
       sys.exit(0) 
      elif opt in ('-c', '--company'): 
       tested_company = arg 
      elif opt == '-i': 
       displayInfos=1 
except getopt.GetoptError as e: 
    print (e) 
    usage() 
    sys.exit(3) 
+0

это действительно лучший код, чем у меня – kuzko

2

Я думаю, что вам не хватает знака равенства после company в вашем Getopt вызова. Этот код работает для меня:

import getopt 
import sys 

tested_company=None 
try: 
    opts, args = getopt.getopt(sys.argv[1:], "hc:i", ['help', 'company=', 'info']) #first argument ignored because zabbix giving it and being useless 
    print(opts) 
except getopt.GetoptError as e: 
    print (e) 
    usage() 
    sys.exit(3) 
if not opts: 
    #print ('No options supplied, only updating the database') 
    print("3") 
    sys.exit(3) 
else: 
    for opt, arg in opts: 
     if opt in ('-h', '--help'): 
      usage() 
      sys.exit(0) 
     elif opt in ('-c', '--company'): 
      tested_company = arg 
     elif opt == '-i': 
      displayInfos=1 

print(tested_company) 

Вызов этого с

> python .\script.py -c xxxx 

дает

[('-c', 'xxxx')] 
xxxx 

Вызов с

> python .\script.py --company xxxx 

дает

[('--company', 'xxxx')] 
xxxx 
Смежные вопросы