Ответ 1
Параметр, за которым следует двоеточие, означает, что ему нужен аргумент. Это не означает, что этот параметр применяется. Вы должны написать свой собственный код, чтобы обеспечить наличие опций/аргументов.
У меня возникают проблемы с этим кодом getopt()
в script, который я пишу, который делает некоторые простые манипуляции с файлами, заданными 2 обязательными параметрами (имя входного файла и имя выходного файла) и/или 2 необязательных/ситуационных аргумента ( debug или help).
Код:
def main(argv):
try:
opts, args = getopt.getopt(argv, "i:o:dh", ["input-file=", "output-file=", "debug", "help"])
except getopt.GetoptError:
usage()
sys.exit(2)
for opt, arg in opts:
if opt in ("-h", "--help"):
usage()
sys.exit()
elif opt in ("-d", "--debug"):
global _debug
_debug = 1
elif opt in ("-i", "--input-file"):
u_input_file_name = arg
elif opt in ("-o", "--output-file"):
u_output_file_name = arg
Согласно документации getopt()
:
которые требуют аргумента, за которым следует двоеточие ('
:
', то есть тот же формат, который использует Unix getopt()).
Проблема заключается в том, что, насколько я понимаю, переменные /args, за которыми следует :
, должны выполняться по мере необходимости... но параметры i
и o
не применяются. Выполнение этого фрагмента завершает отправку ошибки о u_input_file_name
перед назначением:
[[email protected] ~/python]$ ./inco_add_cm_mpscli.py -o google
Traceback (most recent call last):
File "./inco_add_cm_mpscli.py", line 57, in <module>
main(sys.argv[1:])
File "./inco_add_cm_mpscli.py", line 25, in main
infile = open(u_input_file_name, 'r')
UnboundLocalError: local variable 'u_input_file_name' referenced before assignment
Что я делаю неправильно?
Параметр, за которым следует двоеточие, означает, что ему нужен аргумент. Это не означает, что этот параметр применяется. Вы должны написать свой собственный код, чтобы обеспечить наличие опций/аргументов.
Как примечание, я обнаружил, что argparse проще и полезнее, чем getopt, и поддерживает обязательные аргументы.
http://docs.python.org/2/howto/argparse.html#id1
import argparse
parser = argparse.ArgumentParser()
parser.add_argument("echo", help="echo the string you use here")
args = parser.parse_args()
Командная строка
$ python prog.py
usage: prog.py [-h] echo
prog.py: error: the following arguments are required: echo