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.