2017-07-26 4 views
0

Ich möchte einen Frequenzsynthesizer mit einem Remote-Gerät mit Python 2.7 steuern.Kann nicht USB-Ausgang von einem anderen Gerät mit paramiko

Die Kommunikation direkt über einen USB-Port von einem Rapberry Pi erfolgt über Terminal. Die Befehle finden Sie im Handbuch. Es gibt zwei Arten von Befehlen, eingestellt und erhalten, zum Beispiel:

echo 0E > /dev/ttyACM0 # 0E is the code to reset 
echo 04 > /dev/ttyACM0|head</dev/ttyACM0 # 04 will return the frequency 

ich den folgenden Code verwenden, um die Ausgabe in Python auf meiner Himbeere zu erhalten:

print(os.popen(echo 04 > /dev/ttyACM0|head</dev/ttyACM0)) 

Der Terminalbefehl ausgeführt werden kann mit ssh von einem anderen Gerät.

Jetzt, wenn ich versuche, Python zu verwenden, kann ich Set-Befehle ohne Probleme verwenden, aber Befehle erhalten nicht die richtige Ausgabe.

Ich verwende die folgende Funktion:

import paramiko 
ssh = paramiko.SSHClient() 
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) 
global Con # nected 
con=0 


     def SSHConnection(): 
      global con 
      while True: 
       try: 
        ssh.connect(IP,username=User,password=Password) 
        con=1 
        break 
       except: 
        tkMessageBox.showwarning("Error!", "Device not found or wrong Login") 
        break 

     def outin(command): 
      global con 
      output="sudo echo "+command+"> /dev/ttyACM0|head</dev/ttyACM0" 
      if remote.get()==0: # switches between remote and direct output 
       answer=os.popen(output).readlines() 
      else: 
       if con==0: # checks wether a connection has already 
        SSHConnection() # connects 
       else: 
        pass 
       stdin,stdout,stderr = ssh.exec_command(output) 
       answer=stdout.read() 
      return answer 

fand ich online, die meine Funktion die .read() tun könnte, bevor mein Befehl ausgeführt wurde. Alle Lösungen, die ich online fand, benutzten die channel.recv_exit_status()-Funktion, die mich in einer Schleife festhielt.

Ich wäre sehr froh, wenn mir jemand helfen könnte.

Edit: Die falsche Ausgabe ist in der Tat 0x0096 = 150 was nicht so falsch ist, aber normalerweise die letzte Anfrage, die ich sende.

Antwort

0

Das Problem ist eine Art von Timing. Ich habe eine Problemumgehung gemacht, indem ich einen Python-Code auf dem Remote-Gerät aufgerufen habe, um die Ausgabe in einer anderen Datei zu speichern, und dann die Datei aufrufen. Funktioniert in etwa 98% der Anrufe.

Verwandte Themen