Доступ к stderr после запуска скрипта python через модуль sh

Я запускаю скрипт Python через модуль sh, и во время выполнения происходит сбой. При сбое он выводит первые несколько строк stderr, но сообщает, что есть еще ошибки и что я должен увидеть e.stderr, но я не могу понять, как это сделать, потому что я не знаю, как это сделать. знать, что такое е. Как я могу получить доступ к остальной части моего файла stderr? Спасибо.

РЕДАКТИРОВАТЬ: Вот ошибка:

STDERR:
mydir/test.py:22: UserWarning: gzip transfer encoding is experimental!
  br.set_handle_gzip(True)
Traceback (most recent call last):
  File "mydir/test.py", line 142, in <module>
    run(sys.argv[1]);
  File "mydir/test.py", line 13, in run
    scrape(browser,folderName);
  File "mydir/test.py", line 46, in scrape
    processResponse(browser,folderName,1);
  File "mydir/test.py", line 121, in processResponse
    urllib.urlencode(data));
  File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/mechanize-0.2.6.dev_20130122-py2.7.egg/mechanize/_mechanize.py", line 203, in open
    return self._mech_open(url, data, timeout=timeout)
  File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-pac... (4278 more, please see e.stderr)

person abw333    schedule 23.01.2013    source источник
comment
e.stderr, вероятно, является переменной в какой-то части вашего скрипта или библиотеки, которую вы импортировали. Как насчет того, чтобы опубликовать ошибку?   -  person Adam Cadien    schedule 23.01.2013
comment
@AdamCadien Спасибо за ваш ответ. Я просто добавил ошибку выше. Дайте мне знать, если вам нужна дополнительная информация.   -  person abw333    schedule 23.01.2013


Ответы (2)


Сообщение о e.stderr приходит из модуля sh.

(https://github.com/amoffat/sh/blob/30bd191a4f966bcf82c5666c56aeb1060d035920/sh.py#L148)

Я написал простую программу error.py, которая просто много пишет в stderr, а затем завершает работу с ненулевым кодом возврата. Чтобы избавиться от сообщения, просто используйте блок try/except:

import sh

cmd = sh.Command("./error.py")
try:
   c = cmd()
except sh.ErrorReturnCode, e:
    print e.stderr
person ascobol    schedule 20.05.2014
comment
Круто, спасибо за ссылку на исходный код, это было очень полезно! - person samjewell; 16.07.2021

Посмотрите этот ответ: что делает тег механизма br.set_handle_gzip?

Надеюсь, это уменьшит количество ошибок более чем на 1.

person Adam Cadien    schedule 23.01.2013