Python: передача сокета по ссылке - PullRequest
2 голосов
/ 12 июля 2011

Я новичок в python, и мне приходится кодировать свою первую задачу на python.Я обещаю, что выучу это наизнанку после того, как закончу, но сейчас мне нужна ваша помощь.

Мой код в настоящее время выглядит так:

comSocket.send("\r")
sleep(1)
comSocket.send("\r")
sleep(2)
comSocket.settimeout(8)
try:
   comSocket.recv(256)
except socket.timeout:
   errorLog("[COM. ERROR] Station took too long to reply. \n")
   comSocket.shutdown(1)
   comSocket.close()
   sys.exit(0)

comSocket.send("\r\r")
sleep(2)
comSocket.settimeout(8)
try:
   comSocket.recv(256)
except socket.timeout:
   errorLog("[COM. ERROR] Station took too long to reply. \n")
   comSocket.shutdown(1)
   comSocket.close()
   sys.exit(0)

errorLog - это другой метод.Я хочу переписать этот код, создав новый метод, чтобы я мог передать message, ссылку на socket и затем return то, что я получаю из сокета.

Любая помощь?

Спасибо:)

Ответы [ 3 ]

3 голосов
/ 12 июля 2011

Угадайте, что вы пытаетесь:

def send_and_receive(message, socket):
    socket.send(message)
    return socket.recv(256) # number is timeout

затем поместите ваш try:except: вокруг вашего вызова этого метода.

2 голосов
/ 23 августа 2011

Простое решение будет

def socketCom(comSocket, length, message, time):
    comSocket.send(message)
    comSocket.settimeout(8)
    if (time != 0):
        sleep(time)
    try:
        rawData = comSocket.recv(length)
    except socket.timeout:
        errorLog("[COM. ERROR] Station took too long to reply. \n")
        comSocket.shutdown(1)
        comSocket.close()
        sys.exit(0)

    return rawData
1 голос
/ 12 июля 2011

Вы должны создать класс для управления своими ошибками, и этот класс должен расширять тот, который вы используете для экземпляра comSocket, внутри этого класса вы помещаете свою функцию errorLog.Примерно так:

class ComunicationSocket(socket):
    def errorLog(self, message):
        # in this case, self it's an instance of your object comSocket, 
        # therefore your "reference"
        # place the content of errorLog function
        return True # Here you return what you received from socket

Теперь с этим только то, что вам нужно сделать, это создать экземпляр ComunicationSocket:

comSocket = ComunicationSocket()
try:
    comSocket.recv(256)
except socket.timeout:
    # Uses the instance of comSocket to log the error
    comSocket.errorLog("[COM. ERROR] Station took too long to reply. \n")
    comSocket.shutdown(1)
    comSocket.close()
    sys.exit(0)

Надеюсь, что это помогло, вы не опубликовали содержание своей ошибки функциижурнал, поэтому я разместил комментарий, где вы должны поместить егоЭто один из способов делать вещи.Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...