2014-06-17 41 views
1

操作系統是Windows 7 x64(運行Python x86),但代碼需要導出到Windows XP和Ubuntu Linux。Python條碼掃描器緩衝區未清除

這部分問題可能是Windows 7 x64特定的。

我使用的是兼容HID Keyboard的USB條形碼掃描儀。

我在我的keyboard.py文件存在的文件夾中打開命令提示符並執行它。

第一次完美運行並退出,OK。

當我在同一窗口中重新運行時,掃描儀數據似乎被緩衝,並且在進行新掃描時不再發生變化。

我試圖關閉使用的代碼:

.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項目\鍵盤輸入> keyboard.py [)> 0617V33SR41P12973001S10515725 輸出字符串:[]> 0617V33SR41P12973001S10515725

D:\ Python Projects \ Keyboard Input> keyboard.py [)> 0617V33SR41P12973001S10515725

第二次運行檔位,如圖所示。但是,第二次掃描以23而不是25結束!

如果我按輸入腳本完成。進一步的掃描是相同的。

+0

嘗試sys.stdin.readline()。帶()的,而不是分析標準輸入自己。我認爲這應該給你你正在尋找的結果。 – Claris

回答

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) 

你在哪裏然後會針對殘培計劃()讀取輸入。

+0

即使同時添加內部.flush()給出了這樣的: d:\ Python項目\鍵盤輸入> keyboard.py [)> 0617V33SR41P12973001S10515723 [)> 0617V33SR41P12973001S10515723 [)> 0617V33SR41P12973001S10515723 我得到的前兩行一次掃描後。第三行嘗試添加不同的掃描。此後,沒有進一步的輸入被捕獲。 鍵盤上的[Enter]給出第四行。之後再次輸入被阻止。如果我將焦點移至記事本,我會得到正確的掃描數據。 如果我移回到命令窗口,掃描數據保持不變。 奇怪! – user3279899

+0

順便說一句Python 2.7.6 – user3279899

+0

你可以試試msvcrt.getch()作爲解決方法嗎? – Claris