Paramiko无法获得stderr

时间:2017-12-07 17:22:33

标签: python mysql python-2.7 ssh paramiko

出于某些原因,我必须使用mysql而不是Paramiko。

我有这个(简化的)代码段:

stdin, stdout, stderr = c.exec_command("mysql stuff -e 'rename table foo to bar'")
print stdout.read()
print stderr.read()

但如果表foo不存在,我没有输出(没有stdoutstdin输出。

但这很奇怪,因为:

stdin, stdout, stderr = c.exec_command("mysql stuff -e 'rename table foo to bar'")
if stderr.read()
    print "Error: %s" % stderr.read()
    print type(stderr.read())

有这个输出:

Error:
<type 'str'>

mysql错误通常是:

  

ERROR 1017(HY000)第1行:找不到文件:'。/ stuff / foo.frm'(错误号:2 - 没有这样的文件或目录)

我想要更详细的错误输出,但我不能拥有它。为什么呢?

2 个答案:

答案 0 :(得分:2)

您无法阅读stdin。这是输入,而不是输出。

这就是为什么你得到“文件未开放阅读”。它与您mysql命令无关。

答案 1 :(得分:0)

if stderr.read()
    print "Error: %s" % stderr.read()
    print type(stderr.read())

第一次调用stderr.read()会使后续调用返回任何内容。

将其更改为:

for line in stderr:
    print "Error: %s" % line