我有一个python模块,需要能够在Windows和Linux上运行。运行时它会响应某些键盘“热键”。它是一个python 3.3脚本。
在我的类构造函数中,我执行以下操作:
self.setup_stdin()
函数setup_stdin
是这样的:
def setup_stdin(self):
self.osname = os.name
if self.osname == 'posix':
self.setup_posix_stdin()
elif self.osname == 'nt':
self.setup_nt_stdin()
当我在Linux上运行时,我对setup_posix_stdin
没有任何问题,它只会使stdin
无阻塞,因此我可以处理击键。
setup_nt_stdin
如下:
def setup_nt_stdin(self):
import msvcrt
但是,当我在Windows 7上运行时,我的程序会以
炸弹NameError: global name 'msvcrt' is not defined
为了解决这个问题,当我在Windows上运行时,我将import语句移动到文件的顶部,并用pass替换setup_nt_stdin
函数体,它运行正常。
我以为我可以从一个函数导入。这个函数在一个类里面,还有其他一些我缺少的语法吗?
答案 0 :(得分:1)
import
语句仅在本地范围内绑定导入模块的名称。
要解决这个问题,你可以这样做:
def setup_nt_stdin(self):
global msvcrt
import msvcrt
虽然考虑到你可以import
多次执行某些事情而不再执行任何事情,并且在实际使用名称msvcrt
之前你需要警卫来检查操作系统,这可能更有意义在需要它的每个特定于窗口的函数中只有import msvcrt
。