2013-07-11 83 views
2

背景的Python:通過套接字接收數據 - [錯誤11]資源暫時不可

我需要從蟒與泰克MSO 4104進行通信。通信使用vxi11以太網協議和python的套接字庫在局域網上進行。

形勢

現在這個工程相當不錯;我可以連接到範圍,我可以發送任何我想要的命令(例如:<socket object>.send('*IDN?'))。然而,無論何時一個命令應該發送響應(如* IDN?應該這樣做),我嘗試使用<socket object>.recv(1024),但我總是收到錯誤「[Errno 11]資源暫時不可用」。

我知道連接是好的,因爲我可以接收信息到相同的'* IDN?'。通過內置的HTTP接口提示。

代碼

以下是從scope.py片段,其創建與範圍TEH套接字接口。

import socket 
import sys 
import time 

class Tek_scope(object): 
    ''' 
    Open up socket connection for a Tektronix scope given an IP address 
    ''' 
    def __init__(self, IPaddress, PortNumber = 4000): 
     self.s = socket.socket(socket.AF_INET , socket.SOCK_STREAM) 
     self.s.connect((IPaddress, PortNumber)) 
     self.s.setblocking(False) 
     print "Scope opened Successfully" 

我們得到錯誤,我運行以下命令:

import scope # Imports the above (and other utility functions) 

scope1 = scope.Tek_scope("10.1.10.15") #Connects to the scope 

scope1.s.send('*IDN?') #Sends the *IDN? command to the scope. 

# I have verified these signals are always recieved as I can 
# see them reading out on the display 

scope1.s.recv(1024) 

# This should receive the response... but it always gives the error 

系統

  • 的Fedora 16
  • 的Python 2.7
  • 泰克MSO4104

問題

那麼,爲什麼沒有我recieveing響應我提示任何數據?我忘了某種預習嗎?數據是否在某處我只是不檢查?我剛剛使用了錯誤的模塊嗎?任何幫助將不勝感激!

回答

3

這適用於我使用相同的範圍。

設置setblocking(True)並將\ n添加到* IDN?命令。

import socket 
import sys 
import time 

class Tek_scope(object): 

    def __init__(self, IPaddress, PortNumber = 4000): 
     self.s = socket.socket(socket.AF_INET , socket.SOCK_STREAM) 
     self.s.connect((IPaddress, PortNumber)) 
     self.s.setblocking(True) 
     print "Scope opened Successfully" 

scope1 = Tek_scope("10.1.10.15") #Connects to the scope 

scope1.s.send('*IDN?\n') #Sends the *IDN? command to the scope. 

print scope1.s.recv(1024) 
+0

嘿,謝謝你的工作!不幸的是,對於我來說,我最終只是把所有東西都報廢,然後用C寫出來。但是感謝修復! – Bacaa14

相關問題