5
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()

Why have sometime will AttributeError: 'NoneType' object has no attribute 'time' in Python3.8 and sometime need wait long time show as result(or how can i see process)

Error code:

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'

Advance

how can i use paramiko double ssh

localhost >> a(server) ssh >> b

ForeverNews
  • 73
  • 1
  • 6
  • 1
    Please all the **full** error traceback to your question! – Klaus D. Feb 03 '20 at 10:28
  • Exception ignored in: 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' – ForeverNews Feb 04 '20 at 00:42
  • Please edit your question and add the traceback there, formatted as a code block. – Klaus D. Feb 04 '20 at 03:04
  • added , thanks your tech – ForeverNews Feb 04 '20 at 05:46
  • Looking at the code I'd recommend setting a timeout when you run your `exec_command`. Also I'd recommend running each command line by line in an interpreter to see which part exactly causes the exception - I'm curious as to whether it's during the read of stderr etc and a result of the buffer still being written to whilst you're trying read to it. All else fails, raise a bug report, since its 3.8 and the fact that you're seeing an Exception being ignored and the message in the trace you're getting means it's not caught by any meaningful exception class they provide. – 264nm Feb 04 '20 at 09:23
  • i tried,but just show same error – ForeverNews Feb 06 '20 at 04:09
  • Have you found a solution? I have the same problem. – Max Block Feb 08 '20 at 12:48
  • no, i dont know how to solve problem,maybe change to use other library? – ForeverNews Feb 10 '20 at 06:26
  • I have this problem too. I found that if I added a sleep after command execution the issue doesn't appear. This is my code `ssh_stdin, ssh_stdout, ssh_stderr = ssh.exec_command(cmd_to_execute) time.sleep(0)`. It seems far from ideal. Adding a timeout to the `exec_command` didn't make any difference. – runnerpaul Apr 29 '20 at 08:47

3 Answers3

4

Maybe you can try something like this:

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

(don't forget to import time)

This seems to add more time to process the command

NobodyNada
  • 7,002
  • 6
  • 39
  • 48
1

It's the bug opened on https://github.com/paramiko/paramiko/issues/1617. As @NobodyNada said adding a time.sleep(5) is a workaround.

0

add the below:

if __name__ == "__main__":
    main()

then put your code in the main() def