操作系统是Windows 7 x64(运行Python x86),但代码需要导出到Windows XP和Ubuntu Linux。
问题的这一部分可能是Windows 7 x64特有的。
我正在使用兼容HID键盘的USB条形码扫描仪。
我在我的keyboard.py文件所在的文件夹中打开命令提示符并执行它。
第一次完美运行并退出,好的。
当我在同一窗口中重新运行时,扫描仪数据似乎被缓冲,并且在进行新扫描时不再更改。
我尝试使用以下方法关闭代码:
.flush() .readline() and .read() all to no avail. Is this a flaw in Win7 or am I missing something.
CODE:
import sys
x = ''
oStr = ''
#while x != 'exit':
while True:
x = sys.stdin.read(1)
if (x.find('\n') != -1) or (x.find('\04') != -1):
break
oStr = oStr + x
print 'Output String: ' + oStr #+ '\n'
Output:
D:\ Python Projects \ Keyboard Input> keyboard.py [)GT; 0617V33SR41P12973001S10515725 输出字符串:[]> 0617V33SR41P12973001S10515725
D:\ Python Projects \ Keyboard Input> keyboard.py [)GT; 0617V33SR41P12973001S10515725
如图所示,第二次运行失速。但是,第二次扫描以23而不是25结束!
如果我按 Enter ,脚本就会完成。进一步的扫描是一样的。
答案 0 :(得分:0)
为了澄清我之前的评论,请从以下开始:
while 1:
print sys.stdin.readline.strip()
这应该为每个触发按键提供一个条形码。如果这样做,然后顺序运行程序失败,你需要看看你的条码扫描器是如何配置的(这将是一个Windows配置问题,而不是python问题。)
更新: Windows控制台在控制台中显示了一些奇怪之处,您可以使用msvcrt.getch()解决这个问题,但这不是跨平台的解决方案。制作这个跨平台的一种可能方法是:
try:
from msvcrt import getch
except:
import sys
getch = lambda: sys.stdin.read(1)
然后你可以针对getch()编程来读取输入。