Irf*_*ar7 9 python remote-access paramiko python-2.7
我在Ubuntu上用python编写程序.在该程序中,我尝试在连接到网络的远程计算机(RaspberryPi)上完成"删除文件"任务后打印一条消息.
但在实际操作中,打印命令不会等到远程机器上的任务完成.
任何人都可以指导我如何做到这一点?我的编码如下
import paramiko
# Connection with remote machine
client = paramiko.SSHClient()
client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
client.connect('192.168.2.34', username='pi', password='raspberry')
filename = 'fahad.txt'
filedelete ='rm ' + filename
stdin, stdout, stderr = client.exec_command(filedelete)
print ("File Deleted")
client.close()
Run Code Online (Sandbox Code Playgroud)
Syl*_*oux 30
这确实是一个重复的paramiko SSH exec_command(shell脚本)在完成之前返回,但答案并不是非常详细.所以...
正如您所注意到的,exec_command是一种非阻塞呼叫.因此,您必须使用以下任一方法等待远程命令的完成:
Channel.exit_status_ready 如果你想要一个非阻塞的命令完成检查(即:汇集)Channel.recv_exit_status 如果要阻塞直到命令完成(并返回退出状态 - 退出状态为0表示正常完成).在您的特定情况下,您需要后者:
stdin, stdout, stderr = client.exec_command(filedelete) # Non-blocking call
exit_status = stdout.channel.recv_exit_status() # Blocking call
if exit_status == 0:
print ("File Deleted")
else:
print("Error", exit_status)
client.close()
Run Code Online (Sandbox Code Playgroud)
除了按照 Sylvian Leroux 的建议进行操作之外:
如果您的命令涉及运行需要在 paramiko 关闭 ssh 会话后继续运行的 bash 脚本(每次发送命令时都会发生这种情况),请使用:
nohup ./my_bash_script.sh >/dev/null 2>&1.
nohup 告诉系统此进程应忽略 ssh 会话关闭时收到的“挂断”信号。
>/dev/null 2>&1重定向输出。这是必要的,因为在某些情况下,在收到输出之前不会将控制权交还给您的 python 脚本。
要运行诸如“stress”和“vlc”之类的命令行应用程序并在您返回后保持它们运行,我发现的唯一解决方案是将您的命令放在 bash 脚本中,后跟一个&或&>/dev/null使用该方法,然后调用的bash脚本的paramiko我在上一段提到过。
这似乎有点“hacky”,但这是我经过数天搜索后找到的唯一方法。
| 归档时间: |
|
| 查看次数: |
15727 次 |
| 最近记录: |