Я портирую через существующий скрипт, который отлично работает на моем коллегном компьютере, который получает файл .elf в аргументах и генерирует .vbf из него. Это уму непостижимо, потому что все остальные скрипты нормально работали на моем компьютере. Я запускаю его с Python 2.7.15.
vbf_builder_1_21_2.py --asw D: \ tmp \ FC8R009T4D3-20180523-182234.elf
Traceback (most recent call last):
File "D:/Bence/Python/Ford/pupp_package/Ford_FC8_VBFbuilder/vbf_builder_1_21_2.py", line 1296, in <module>
CustomerBuildScript().print_step("Get environment information")
File "D:/Bence/Python/Ford/pupp_package/Ford_FC8_VBFbuilder/vbf_builder_1_21_2.py", line 482, in __init__
self.initialize()
File "D:\Bence\Python\Ford\pupp_package\Ford_FC8_VBFbuilder\BuildScriptBase.py", line 26, in initialize
self.parseArguments()
File "D:\Bence\Python\Ford\pupp_package\Ford_FC8_VBFbuilder\BuildScriptBase.py", line 80, in parseArguments
self.args = parser.parse_args()
File "C:\Python27\lib\argparse.py", line 1701, in parse_args
args, argv = self.parse_known_args(args, namespace)
File "C:\Python27\lib\argparse.py", line 1733, in parse_known_args
namespace, args = self._parse_known_args(args, namespace)
File "C:\Python27\lib\argparse.py", line 1957, in _parse_known_args
self.error(_('argument %s is required') % name)
File "C:\Python27\lib\argparse.py", line 2373, in error
self.print_usage(_sys.stderr)
File "C:\Python27\lib\argparse.py", line 2335, in print_usage
self._print_message(self.format_usage(), file)
File "C:\Python27\lib\argparse.py", line 2291, in format_usage
return formatter.format_help()
File "C:\Python27\lib\argparse.py", line 281, in format_help
help = self._root_section.format_help()
File "C:\Python27\lib\argparse.py", line 211, in format_help
func(*args)
File "C:\Python27\lib\argparse.py", line 332, in _format_usage
assert ' '.join(opt_parts) == opt_usage
AssertionError
Process finished with exit code 1
Я прочитал, что ошибка обычно возникает, когда есть длинный код, который разбит на части и содержит квадратные скобки, и он был исправлен, но все равно всплывает.
РЕДАКТИРОВАТЬ: понял, в чем проблема. Пробелы.
Сотрудник, который последний раз редактировал скрипт, хотел, чтобы он выглядел аккуратно, поэтому он выровнял объявление списка параметров таким образом, чтобы запятые находились ниже друг друга. По одному параметру он случайно поместил пробелы внутри имени, а не за его пределы. Эти символы пробела приводили в замешательство аргументparser, когда он обрезал необработанную строку до параметров.
Когда вы подсасываете свой код, обязательно протестируйте его снова, прежде чем передавать его другим.