Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/295.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何从类方法全局使用定义为ser的序列?_Python_Python 2.7 - Fatal编程技术网

Python 如何从类方法全局使用定义为ser的序列?

Python 如何从类方法全局使用定义为ser的序列?,python,python-2.7,Python,Python 2.7,当我在类ser之外分配这个时,如何使用类方法中的ser?就像在窗口中不工作一样 import socket, datetime, threading, os, serial # declare once ser = serial.Serial('COM3', 19200) class AServer(threading.Thread): def __init__(self, port)

当我在类
ser
之外分配这个时,如何使用类方法中的
ser
?就像在窗口中不工作一样

import socket, 
         datetime, 
           threading, 
             os,
               serial

# declare once 
ser = serial.Serial('COM3', 19200)

class AServer(threading.Thread):
  def __init__(self, port):
    threading.Thread.__init__(self)
    self.port = port

  def now(self):
    d = datetime.datetime.now()
    return d.strftime("%d/%m/%y %H:%M:%S")

  def run(self):
    host = ''
    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    s.bind((host, self.port))
    print 'successfully, waiting...'
    s.listen(1)
    conn, addr = s.accept()
    print 'contact', addr, 'on', self.now()

    while 1:
      try:
        data = conn.recv(1024)
      except socket.error:
        print 'lost', addr, 'waiting..'
        s.listen(1)
        conn, addr = s.accept()
        print 'contact', addr, 'on', self.now()
        continue

      if not data:
        print 'lost', addr, 'waiting..'
        s.listen(1)
        conn, addr = s.accept()
        print 'contact', addr, 'on', self.now()
      else:    
        print "received msg:", data
        conn.send('roger')
        if data.startswith('blablabla'):
          ser.write('\x02\x01\x80\x00\x03\x80')
        else:
          print "not ok"

t = AServer(80)
t.start()

这与Python的名称空间有关。您需要说明您想要访问全局
ser
变量

# declare once 
ser = serial.Serial('COM3', 19200)

class AServer(threading.Thread):
  def __init__(self, port):
    threading.Thread.__init__(self)
    self.port = port

    global se
    self._ser = ser # local reference to global variable

这与Python的名称空间有关。您需要说明您想要访问全局
ser
变量

# declare once 
ser = serial.Serial('COM3', 19200)

class AServer(threading.Thread):
  def __init__(self, port):
    threading.Thread.__init__(self)
    self.port = port

    global se
    self._ser = ser # local reference to global variable

你总是可以把它传递给构造函数,让全局的东西挂在周围从来都不是一个好主意。。。python很适合编写脚本,但是当你想用它做更多的事情时,你必须回去清理那些东西,“不工作”意味着什么?您是否收到错误消息或其他迹象表明变量的全局性质是问题所在?@kindall:没有错误,只是触发器或com写入失败。当我全局调用它时,我的机器人左手并没有移动,但当我在while 1中赋值时,它是危险的。它在那里工作。我的机器人左臂和右臂移动。好的。那么为什么您认为全局变量是问题所在呢?如果多个线程使用同一个串行端口,这可能会变得混乱,但我看不到这一点。使用Java的经验在这里并不重要。你可以随时将其传递给构造函数,让全局的东西挂在身边从来都不是一个好主意。。。python很适合编写脚本,但是当你想用它做更多的事情时,你必须回去清理那些东西,“不工作”意味着什么?您是否收到错误消息或其他迹象表明变量的全局性质是问题所在?@kindall:没有错误,只是触发器或com写入失败。当我全局调用它时,我的机器人左手并没有移动,但当我在while 1中赋值时,它是危险的。它在那里工作。我的机器人左臂和右臂移动。好的。那么为什么您认为全局变量是问题所在呢?如果多个线程使用同一个串行端口,这可能会变得混乱,但我看不到这一点。Java的经验在这里并不重要。访问方法或函数中的全局变量不需要在该函数中声明为全局变量。@kindall:你知道为什么他们建议使用
global
<需要代码>全局在全局范围内分配名称。-1。访问方法或函数中的全局变量不需要在该函数中声明为全局变量。@kindall:你知道为什么他们建议使用
global
<代码>全局用于在全局范围内分配名称。