invoke.exceptions.ThreadException:
Saw 1 exceptions within threads (OSError):
Thread args: {'kwargs': {'buffer_': ['[sudo] password: '],
'hide': False,
'output': <_io.TextIOWrapper name='<stderr>' mode='w' encoding='UTF-8'>},
'target': <bound method Runner.handle_stderr of <fabric.runners.Remote object at 0x7f066e63a9e8>>}
Traceback (most recent call last):
File "/home/amezin/test/.venv/lib/python3.6/site-packages/invoke/util.py", line 233, in run
super(ExceptionHandlingThread, self).run()
File "/usr/lib/python3.6/threading.py", line 864, in run
self._target(*self._args, **self._kwargs)
File "/home/amezin/test/.venv/lib/python3.6/site-packages/invoke/runners.py", line 750, in handle_stderr
buffer_, hide, output, reader=self.read_proc_stderr
File "/home/amezin/test/.venv/lib/python3.6/site-packages/invoke/runners.py", line 717, in _handle_output
self.respond(buffer_)
File "/home/amezin/test/.venv/lib/python3.6/site-packages/invoke/runners.py", line 884, in respond
self.write_proc_stdin(response)
File "/home/amezin/test/.venv/lib/python3.6/site-packages/invoke/runners.py", line 960, in write_proc_stdin
self._write_proc_stdin(data.encode(self.encoding))
File "/home/amezin/test/.venv/lib/python3.6/site-packages/fabric/runners.py", line 67, in _write_proc_stdin
return self.channel.sendall(data)
File "/home/amezin/test/.venv/lib/python3.6/site-packages/paramiko/channel.py", line 846, in sendall
sent = self.send(s)
File "/home/amezin/test/.venv/lib/python3.6/site-packages/paramiko/channel.py", line 801, in send
return self._send(s, m)
File "/home/amezin/test/.venv/lib/python3.6/site-packages/paramiko/channel.py", line 1198, in _send
raise socket.error("Socket is closed")
OSError: Socket is closed
我认为您可能会看到一个不同的错误:我认为它没有进入 sudo auth 阶段。 我在 Python 2.7 上看到了这个,但只有当 stdin 从 /dev/null 重定向时。 也许用pty=True
再试一次?
@matt-hayden 经过数小时的调试,您让我免于精神崩溃。 我还想补充一点,即使只是一个进程,我也只在使用 multiprocessing.Process 时遇到了这个错误。
@matt-hayden 我在 python 3.6 上看到过这个问题,通过 ssh 进入本地 Ubuntu 18.04 容器(其中运行 openssh sshd)。 在完全相同的配置中,相同的“sudo”命令在 99% 的情况下正常工作(引发 AuthFailure),并在剩余的 1% 中引发 OSError。
我不记得 pty 是否设置为 True。
无论如何,我现在不使用fabric,我没有时间验证这个问题是否仍然存在。 所以我想我应该关闭这个问题
错误再次发生,是的,我也在使用 docker 容器
@luke-goddard ,如果它发生在 paramiko 中(如上面的回溯),那么这可能更适合作为 paramiko 项目中的一个问题。
最有用的评论
@matt-hayden 经过数小时的调试,您让我免于精神崩溃。 我还想补充一点,即使只是一个进程,我也只在使用 multiprocessing.Process 时遇到了这个错误。