Захват вывода сценария Python во вложенной командной строке tcsh без подавления вывода argparsePython

Программы на Python
Ответить
Anonymous
 Захват вывода сценария Python во вложенной командной строке tcsh без подавления вывода argparse

Сообщение Anonymous »

У меня многослойная проблема. Это псевдоним, который мне нужно использовать в csh/tcsh:

Код: Выделить всё

alias tools_alpha 'set tools_out=`/tools/bin/tools_alpha.py \!*` ; if ( $tools_out != '\'''\'' ) source $tools_out'
Цель состоит в том, что если программа запустится, она вернет имя сценария оболочки и получит исходный код. Если используется -h, помощь записывается в stderr, но она вернет пустую строку в стандартный вывод, и ничего не будет получено.
Я сделал это с помощью Perl, но вместо этого я хотел бы использовать Python, поскольку я хочу добавить графический интерфейс. Моя первая проблема заключается в том, что при использовании argparse помощь теряется. У меня есть операторы отладки, которые я печатаю на стандартный поток ошибок, и они отлично работают. Согласно документации по argparse, справка должна быть записана в stderr, поэтому я подумал, что это сработает, но при запуске сценария с -h справка не записывается, и переменная оболочки не содержит ничего, что я могу идентифицировать:

Код: Выделить всё

> echo $myout
echo: No match.
Если я перейду к файлу журнала, я получу текст справки.

Код: Выделить всё

set myout=`/tools/bin/tools_alpha.py -h | tee ~/.tools_setup.stderr`
Я не могу понять, куда направляется помощь и что захватил $myout, это как если бы это был стандартный вывод. Я попытался переписать метод argparse, убедившись, что пишу в 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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»