2017-07-26 8 views
0

Python 2.7を使用してリモートデバイスで周波数シンセサイザを制御したいと思います。paramikoを使用して別のデバイスからUSB出力を取得できません

Rapberry PiからUSBポートを直接使用する通信は、Terminal経由で行われます。コマンドはマニュアルにあります。

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

私はラズベリー上のpythonでの出力を取得するには、次のコードを使用します:

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

ターミナルコマンドは、SSHを使用して実行することができる設定および取得コマンドの2種類、例えば、があります。別のデバイスから。

私はPythonを使用しようとすると、問題なしでsetコマンドを使うことができますが、getコマンドでは正しい出力が得られません。私は私のコマンドが実行される前に、私の関数は.read()を行う可能性がありますことをオンラインで見つける

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 

私は次の関数を使用します。 私がオンラインで見つけたすべての解決策は、channel.recv_exit_status()関数を使用していました。これは私をループに陥らせました。

誰かが私を助けることができたらとてもうれしいです。

編集: 間違った出力は実際には0x0096 = 150ですが、間違っていませんが、通常は最後に送信したリクエストです。

答えて

0

問題は何らかのタイミングです。 出力を別のファイルに保存してファイルを呼び出すために、リモートデバイス上でpython-codeを呼び出して回避策を実行しました。 呼び出しの約98%で動作します..

関連する問題