2017-10-17 14 views
0

こんにちは皆私はRaspberry Pi-3で車を作ります。私はいくつかのshhコマンドを送信しています。私の問題IDは、私は直接、私はpythonコンソール出力の出力を送信したいのですが、私はどのようにそうするのですか?Pythonのスクリプト出力をSSHシェルに送信したい

+0

は、あなたの質問はあなたがSSHシェルに出力(print文など)を送信する場合、または行うのですか、明らかではないが、あなたのpythonスクリプトの出力をシェルコマンドとして扱いたいですか?もし最初にsshセッションからスクリプトを呼び出すのに間違っていたら? –

+0

私は、SSHシェルの入力 – salmanarshad1999

+0

への入力としてPythonコンソールの出力を扱いたいと思うのですが、 'subprocess.Popen'を使ってssh接続を広げ、それにメッセージを送ることができます。あるいは、Pythonのsshライブラリhttp://www.paramiko.org/のように、 "出力"が表示されずにサブプロセスまたはsshモジュールに送られるようにスクリプトを変更する必要があります。 –

答えて

0

OSライブラリをPythonで使用すると、PythonプログラムをUNIXシェルと統合することができます。

#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スクリプトは、ユーザー入力の任意の形式を取るかどうか?

0

私はそれを試したことがないので、私は今すぐ試用するために私に利用可能なツールを持っていないとしてあなたが求める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() 
関連する問題