Код: Выделить всё
alias tools_alpha 'set tools_out=`/tools/bin/tools_alpha.py \!*` ; if ( $tools_out != '\'''\'' ) source $tools_out'
Я сделал это с помощью Perl, но вместо этого я хотел бы использовать Python, поскольку я хочу добавить графический интерфейс. Моя первая проблема заключается в том, что при использовании argparse помощь теряется. У меня есть операторы отладки, которые я печатаю на стандартный поток ошибок, и они отлично работают. Согласно документации по argparse, справка должна быть записана в stderr, поэтому я подумал, что это сработает, но при запуске сценария с -h справка не записывается, и переменная оболочки не содержит ничего, что я могу идентифицировать:
Код: Выделить всё
> echo $myout
echo: No match.
Код: Выделить всё
set myout=`/tools/bin/tools_alpha.py -h | tee ~/.tools_setup.stderr`
Код: Выделить всё
class ArgumentParser(argparse.ArgumentParser):
def __call__(self, parser, namespace, values, option_string=None):
parser.print_help(file=_sys.stderr)
parser.exit()
Редактировать
Если я передам print_help(file=sys.stderr), то я смогу печатать в stderr.
Более того, это обсуждение звучит так, будто запись справки в stderr используется по умолчанию:
https://www.python.org/dev/peps/pep-038 ... d-sys-exit
Код: Выделить всё
def print_help(self, file=None):
if file is None:
file = _sys.stdout
self._print_message(self.format_help(), file)
def _print_message(self, message, file=None):
if message:
if file is None:
file = _sys.stderr
file.write(message)
Подробнее здесь: https://stackoverflow.com/questions/384 ... ssing-argp
Мобильная версия