SSHClient adalah kelas pembungkus sederhana di sekitar fungsionalitas yang lebih rendah di Paramiko. The dokumentasi API berisi daftar recv_exit_status()
metode pada Channel
kelas.
Skrip demonstrasi yang sangat sederhana:
import paramiko
import getpass
pw = getpass.getpass()
client = paramiko.SSHClient()
client.set_missing_host_key_policy(paramiko.WarningPolicy())
client.connect('127.0.0.1', password=pw)
while True:
cmd = raw_input("Command to run: ")
if cmd == "":
break
chan = client.get_transport().open_session()
print "running '%s'" % cmd
chan.exec_command(cmd)
print "exit status: %s" % chan.recv_exit_status()
client.close()
Contoh pelaksanaannya:
$ python sshtest.py
Password:
Command to run: true
running 'true'
exit status: 0
Command to run: false
running 'false'
exit status: 1
Command to run:
$
recv_exit_status
, Anda tidak dapat menggunakannya dengan cara ini, karena kodenya mungkin menemui jalan buntu. Anda harus menggunakan output perintah, sambil menunggu perintah selesai. Lihat Paramiko ssh die / hang dengan output besar .Contoh yang jauh lebih mudah yang tidak melibatkan pemanggilan kelas saluran "tingkat bawah" secara langsung (yaitu - TIDAK menggunakan
client.get_transport().open_session()
perintah):sumber
recv_exit_status
, Anda tidak dapat menggunakannya dengan cara ini, karena kodenya mungkin menemui jalan buntu. Anda harus menggunakan output perintah, sambil menunggu perintah selesai. Lihat Paramiko ssh die / hang dengan output besar .Terima kasih untuk JanC, saya menambahkan beberapa modifikasi untuk contoh dan diuji dengan Python3, ini sangat berguna bagi saya.
sumber
Dalam kasus saya, buffering keluaran adalah masalahnya. Karena buffering, keluaran dari aplikasi tidak keluar dengan cara non-blocking. Anda dapat menemukan jawaban tentang cara mencetak keluaran tanpa buffering di sini: Disable output buffering . Singkatnya, jalankan saja python dengan opsi -u seperti ini:
> python -u script.py
sumber