Je veux contrôler un synthétiseur de fréquence avec un appareil distant utilisant Python 2.7.Je ne peux pas obtenir de sortie USB d'un autre appareil en utilisant paramiko
La communication directement à l'aide d'un port USB à partir d'un Rapberry Pi se fait via le terminal. Les commandes se trouvent dans le manuel. Il existe deux types de commandes, définir et obtenir, par exemple:
echo 0E > /dev/ttyACM0 # 0E is the code to reset
echo 04 > /dev/ttyACM0|head</dev/ttyACM0 # 04 will return the frequency
J'utilise le code suivant pour obtenir la sortie en python sur ma framboise:
print(os.popen(echo 04 > /dev/ttyACM0|head</dev/ttyACM0))
La commande Terminal peut être exécutée en utilisant ssh d'un autre appareil. Maintenant, lorsque j'essaie d'utiliser Python, je peux utiliser des commandes set sans probelms, mais obtenir des commandes n'apportera pas la bonne sortie.
J'utilise la fonction suivante:
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
Je trouve en ligne que ma fonction peut faire l'.read()
avant ma commande a été exécutée. Toutes les solutions que j'ai trouvées en ligne utilisaient la fonction channel.recv_exit_status()
, ce qui m'a bloqué dans une boucle.
Je serais très heureux si quelqu'un pouvait m'aider.
Editer: La mauvaise sortie est en fait 0x0096
= 150 ce qui n'est pas faux, mais généralement la dernière requête que j'envoie.