【问题标题】:Accessing stderr after running a python script through the sh module通过 sh 模块运行 python 脚本后访问 stderr
【发布时间】:2013-01-06 10:07:19
【问题描述】:

我正在通过 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)

【问题讨论】:

  • e.stderr 可能是脚本某些部分或导入的库中的变量。您如何发布错误?
  • @AdamCadien 感谢您的回复。我刚刚添加了上面的错误。如果您需要更多信息,请告诉我。

标签: python mechanize sh stderr


【解决方案1】:

关于 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

【讨论】:

  • 太棒了,感谢那里的源代码链接,这非常有用!
【解决方案2】:

看看这个答案: what does mechanize tag br.set_handle_gzip do?

希望能将错误数量减少 1 个以上。

【讨论】:

    最近更新 更多