我試圖設置一個條形碼掃描儀對象,將捕獲掃描儀本身的任何輸入。條形碼掃描儀被識別爲標準輸入(標準輸入),因此無論何時掃描條形碼,我都會得到標準輸入文本。還會有一個鍵盤連接到系統,這是另一個標準輸入。爲了區分條形碼掃描輸入和鍵盤輸入,我將使用任何條形碼信息的前綴。換句話說,如果我的條形碼總長度爲16個字符,則前4個將預定的字符串/鍵表示以下12個字符是條形碼輸入。這是我讀過的非常標準的。Python重定向stdin
現在我見過的大多數例子都會通過捕獲GUI應用程序中的字符輸入事件來識別條碼輸入。這個事件回調方法然後建立一個緩衝區來檢查4個字符的前綴並根據需要重定向條形碼輸入。事件回調方法也會跳過任何不是條形碼相關的字符輸入事件,並允許它們作爲標準輸入通常會與GUI進行交互(鍵入文本框或您有什麼)。
我想做同樣的事情,除了沒有使用GUI應用程序。我希望我的條形碼掃描器對象獨立於GUI應用程序。理想情況下,我會在條形碼掃描器對象中使用回調方法,每次輸入字符時stdin都會調用。從那裏,我會通過檢查4個字符的前綴來獲取任何條形碼輸入,並且可以傳遞除條形碼輸入之外的任何字符。換句話說,我希望stdin通過我的條形碼掃描器回調方法,然後讓我的條形碼掃描器回調方法能夠將非條形碼字符作爲標準輸入返回,就像什麼都沒有發生過一樣(仍然是標準輸入那會去一個文本框或什麼的)。
這可能沒有一個while循環不斷監測標準輸入?即使我有一個while循環監視標準輸入,如果不是條形碼輸入,我如何將字符作爲標準輸出抽出?我研究過使用pyusb接管條碼掃描儀的USB接口,但這需要root權限才能與硬件交互(不是我項目的選項)。任何幫助將不勝感激。我還沒有找到一個這樣的例子。
編輯:此項目將運行在CentOS或Linux的某些味道。
編程中的一個常見主題。如何將兩個數據流合併到一個通道並在另一側再次分離出來?你必須有框架或轉義序列,或者什麼東西,告訴你到底哪些數據屬於哪個流,何時開始和結束,等等。 – wberry
@wberry在這種情況下,我將有一個前綴和轉義序列來確定哪些文本屬於條形碼輸入。真的,我只需要弄清楚如何讓stdin爲每個字符輸入調用我的方法之一,並且能夠將字符作爲標準輸入返回。 – user1777820
如果你使用* nix,你不能只通過一些把它分成兩個輸出管或類似的東西來管stdin嗎? – martineau