How to execute commands in a remote server using python?

£可爱£侵袭症+ 提交于 2020-06-29 03:33:11

问题


This question is related to this other one: How to use sockets to send user and password to a devboard using ssh

I want to connect to the devboard in order to execute a script. All the outputs of that script I want to send to a Elasticsearch machine.

I can connect to the devboard (see IMAGE below) using my laptop which happens to have Elasticsearch installed. But, when I want to send data to the devboard, the script shows nothing. What I am doing is:

  • As soon as you find mendel@undefined-eft:~$ , send the command: cd coral/tflite/python/examples/classification/Auto_benchmark\n

What am I doing wrong?

import paramiko
import os

#Server's data
IP = '172.16.2.47'
PORT = 22
USER = 'mendel'
PASSWORD = 'mendel'


ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect(hostname = IP, port=PORT, username = USER, password = PASSWORD)

channel = ssh.invoke_shell() #to get a dedicated channel

channel_data = str()
host = str()

while True:
    if channel.recv_ready(): #is there data to be read?
       channel_data += channel.recv(9999).decode("utf-8")
       os.system('clear')
       print(channel_data)

#ONLY WORKS UNTIL HERE!!!

    else:
        continue

    if channel_data.endswith('mendel@undefined-eft:~$'):
        channel.send('cd coral/tflite/python/examples/classification/Auto_benchmark\n')
        channel_data += channel.recv(9999).decode("utf-8")
        print(channel_data)

IMAGE

EDIT

channel = ssh.invoke_shell() #to get a dedicated channel

channel_data = str()
host = str()

while True:
    if channel.recv_ready(): #is there data to be read?
       channel_data += channel.recv(9999).decode("utf-8")
       os.system('clear')
       print(channel_data)

    else:
        continue

    if channel_data.endswith('mendel@undefined-eft:~$ '):#it is good to send commands
       channel.send('cd coral/tflite/python/examples/classification/Auto_benchmark\n')
       #channel_data += channel.recv(9999).decode("utf-8")
       #print(channel_data)
    elif channel_data.endswith('mendel@undefined-eft:~/coral/tflite/python/examples/classification/Auto_benchmark$ '):
         channel.send('ls -l\n') #python3 auto_benchmark.py')
         channel_data += channel.recv(9999).decode("utf-8")
         print(channel_data)


回答1:


I guess you have to change the

if channel_data.endswith('mendel@undefined-eft:~$'):

to

if channel_data.endswith('mendel@undefined-eft:~$ '):

according to your prompt. Please note the space after :~$



来源:https://stackoverflow.com/questions/62419187/how-to-execute-commands-in-a-remote-server-using-python

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!