簡體   English   中英

我想將python的腳本輸出發送到SSH shell

[英]I want to send a python's script output to a SSH shell

大家好,我在Raspberry Pi-3中制造汽車。 我正在發送一些噓命令。 我的問題ID是我不想直接發送shh命令,盡管我想發送python控制台輸出的輸出,我該怎么做?

您可以在python中使用OS庫,這將允許python程序與unix shell集成。

#Import Library
import os

#Set the action to 0 as it's not needed right now
action = 0

#Loop infinitely
while True:
    #First of all, list the available actions and let the user choose one.
    print('Actions that can be performed')
    print('ID.  Action')
    print('')
    print('1.  Go Forward')
    print('2.  Go Backwards')
    print('3.  Stop')
    print('')
    print('0.  Stop and exit program')
    print('')

    #Ask the 'driver' what they want the car to do. Program will hang continuing
    #to perform any current action that was previously selected until a different
    #action is provided.
    action = int(input('Enter the numerical ID of the action and press return: '))

    #Do the action based on the numerical ID
    if(action == 1):
        os.system('shell-command-to-go-forward')

    if(action == 2):
        os.system('shell-command-to-go-backward')

    if(action == 3):
        os.system('shell-command-to-stop-everything')

    if(action == 0):
        os.system('shell-command-to-stop-everything')
        exit(0)

如果這不是您要執行的操作,請更加具體。 python腳本應該采用任何形式的用戶輸入嗎?

我無法用您尋求的ssh功能來幫助您,因為我從未嘗試過,現在也沒有可供我使用的工具。 但是我不認為這是正確的工具。 取而代之的是,我附加了一個帶有tkinter GUI的套接字服務器示例,按箭頭鍵將事件發送到套接字服務器,然后可以對其進行操作。

server.py:

import socket

# Create a TCP/IP socket
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

# Bind the socket to the port
server_address = ('localhost', 10000)
print('starting up on %s port %s' % server_address)
sock.bind(server_address)

while True:
    try:
        # Listen for incoming connections
        sock.listen(1)

        while True:
            # Wait for a connection
            print('waiting for a connection')
            connection, client_address = sock.accept()

            try:
                print('connection from', client_address)

                # Receive the data in small chunks and retransmit it
                while True:
                    data = connection.recv(16)
                    if data:
                        print('received "%s"' % data)
                        # here you can test the character received and act accordingly
                        # you could also opt to send data back the other way
#                       print('sending data back to the client')
#                       connection.sendall(data)
                    else:
                        print('no more data from', client_address)
                        break

            finally:
                # Clean up the connection
                connection.close()
    except:
        pass

client.py

import socket
import tkinter as tk

class App(tk.Tk):
    def __init__(self):
        tk.Tk.__init__(self)
        self.title("Car control")

        self.sock = None

        self.addr = tk.Entry(self)
        self.addr.insert(0, "127.0.0.1")
        self.addr.grid(column=1, row=1, sticky="nesw")

        self.button = tk.Button(self, text="Connect", command=self.connect)
        self.button.grid(column=2, row=1, sticky="nesw")

        self.bind("<KeyPress>", self.handle_binding)
        self.bind("<KeyRelease>", self.handle_binding)

    def connect(self):
        try:
            self.sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
            self.sock.connect((self.addr.get(),10000))
            self.addr.configure(state="disabled")
            self.button.configure(text="Disconnect", command=self.disconnect)
            self.focus()
        except (ConnectionRefusedError, socket.gaierror):
            pass

    def disconnect(self):
        self.sock.close()
        self.sock = None
        self.addr.configure(state="normal")
        self.button.configure(text="Connect", command=self.connect)

    def send(self, data):
        if self.sock:
            self.sock.sendall(data.encode('utf8'))

    def handle_binding(self, event):
        if event.widget != self.addr: # ignore key events aimed at texkbox
            char = ""
            if event.keysym == "Up":
                char = "u"
            elif event.keysym == "Down":
                char = "d"
            elif event.keysym == "Left":
                char = "l"
            elif event.keysym == "Right":
                char = "r"
            if event.type == '2': # pressed
                self.send(char)
            elif event.type == '3': # released
                self.send(char.upper())

if __name__ == "__main__":
    app = App()
    app.mainloop()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM