【问题标题】:AttributeError: 'NoneType' object has no attribute 'time' paramikoAttributeError:“NoneType”对象没有属性“时间”paramiko
【发布时间】:2020-05-19 02:17:13
【问题描述】:
import paramiko

key = paramiko.RSAKey.from_private_key_file("abc.pem")
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
print("connecting")
ssh.connect(hostname="1.1.1.1", username="abc", pkey=key)
print("connected")
commands = "ip a"
stdin, stdout, stderr = ssh.exec_command(commands)
print(stdout.read())
print(stderr.read())
print(stdin.read())
ssh.close()

为什么有时会在 Python3.8 中 AttributeError: 'NoneType' object has no attribute 'time' 有时需要等待很长时间才能显示为结果(或者我如何才能看到过程)

错误代码:

Exception ignored in: <function BufferedFile.__del__ at 0x108271ee0>
Traceback (most recent call last):
  File "/venv/lib/python3.8/site-packages/paramiko/file.py", line 66, in __del__
  File "/venv/lib/python3.8/site-packages/paramiko/channel.py", line 1392, in close
  File "/venv/lib/python3.8/site-packages/paramiko/channel.py", line 991, in shutdown_write
  File "/venv/lib/python3.8/site-packages/paramiko/channel.py", line 967, in shutdown
  File "/venv/lib/python3.8/site-packages/paramiko/transport.py", line 1846, in _send_user_message
AttributeError: 'NoneType' object has no attribute 'time'

前进

我如何使用 paramiko 双 ssh

localhost >> a(服务器) ssh >> b

【问题讨论】:

  • 请将所有完整错误回溯到您的问题!
  • 异常忽略在: 文件“/venv/lib/python3.8/site-packages/paramiko/file.py”,第 66 行,在 del 文件“/venv/lib/python3.8/site-packages/paramiko/channel.py”,第 1392 行,关闭文件“/venv/lib/python3.8/site-packages/paramiko/channel. py”,第 991 行,在 shutdown_write 文件“/venv/lib/python3.8/site-packages/paramiko/channel.py”中,第 967 行,在关机文件“/venv/lib/python3.8/site-packages/ paramiko/transport.py",第 1846 行,在 _send_user_message AttributeError 中:'NoneType' 对象没有属性 'time'
  • 请编辑您的问题并在此处添加回溯,格式化为代码块。
  • 已添加,感谢您的技术
  • 查看代码,我建议您在运行exec_command 时设置超时。此外,我建议在解释器中逐行运行每个命令行,以查看究竟是哪个部分导致异常 - 我很好奇它是否是在读取 stderr 等期间以及缓冲区的结果仍然被写入而你'重新尝试阅读它。一切都失败了,提出一个错误报告,因为它是 3.8 并且您看到一个 Exception 被忽略的事实以及您获得的跟踪中的消息意味着它没有被它们提供的任何有意义的异常类捕获。

标签: python linux macos python-3.8


【解决方案1】:

也许你可以试试这样的:

stdin, stdout, stderr = ssh.exec_command(commands)
time.sleep(5)

(别忘了输入时间)

这似乎增加了处理命令的时间

【讨论】:

    【解决方案2】:

    关闭stdin

    stdin, stdout, stderr = ssh.exec_command(commands)
    stdin.close()
    

    【讨论】:

      【解决方案3】:

      添加以下内容:

      if __name__ == "__main__":
          main()
      

      然后把你的代码放在 main() def

      【讨论】:

      • 嗯,不知道为什么,但这确实对我有用。
      【解决方案4】:

      这是在https://github.com/paramiko/paramiko/issues/1617 上打开的错误。正如@NobodyNada 所说,添加 time.sleep(5) 是一种解决方法。

      【讨论】:

        猜你喜欢
        • 2019-01-01
        • 2021-12-26
        • 2019-07-23
        • 2018-05-13
        • 2020-09-07
        • 2017-05-03
        • 2023-03-16
        • 2018-07-14
        • 2013-06-16
        相关资源
        最近更新 更多