背景
我需要和一个来自python的Tektronix MSO 4104通信。使用VXI11以太网协议和Python的套接字库在局域网上进行通信。
形势
现在它工作得很好;我可以连接到作用域,并且可以发送任何我想要的命令(例如:<socket object>.send('*IDN?'))。但是,当命令应该发送响应时(比如*IDN?我试图使用<socket object>.recv(1024),但总是收到错误“[Errno 11]资源暂时不可用”
我知道这个连接很好,因为我可以接收到同一个'IDN'的信息通过内置的HTTP接口进行提示。
代码
下面是scope.py中的一个片段,它创建了与scope的socket接口。

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

系统
软呢帽16
蟒蛇2.7
泰克MSO4104
问题
那么为什么我没有收到任何响应我的提示的数据呢?我忘了准备什么了吗?数据是不是去了我不检查的地方?我用错模块了吗?任何帮助都将不胜感激!

最佳答案

这对我来说同样适用。
设置setblocking(True)并将a\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)

08-06 02:07