通过sh模块运行Python脚本后如何访问stderr

6 投票
2 回答
2344 浏览
提问于 2025-04-17 13:23

我在用sh模块运行一个Python脚本的时候,它在执行过程中崩溃了。崩溃时,它给我显示了stderr的前几行内容,但还告诉我有更多的错误信息,并建议我查看e.stderr。不过我搞不清楚e是什么,所以不知道怎么查看剩下的错误信息。请问我该怎么才能访问到我的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)

2 个回答

0

看看这个回答:

mechanize中的br.set_handle_gzip这个标签是干什么的?

希望这样能减少错误的数量,超过1个。

5

关于 e.stderr 的信息来自于 sh 模块。

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

我写了一个简单的程序 error.py,它会向错误输出写很多内容,然后以一个非零的返回码退出。 要消除这个信息,只需使用一个 try/except 块:

import sh

cmd = sh.Command("./error.py")
try:
   c = cmd()
except sh.ErrorReturnCode, e:
    print e.stderr

撰写回答