Chu*_*d37 7 python qr-code barcode-scanner
我有一个QR阅读器.当QR阅读器扫描时,我想监视它扫描的内容,但我遇到了一个奇怪的问题,因为我是Python的新手,我真的不知道它为什么会发生.好的,下面是两个看似(对我而言)相同的程序,除了行.当删除该行时,我会得到不同的结果(看似charset更改).我真的不明白为什么.
test2.py:
# -*- coding: utf-8 -*-
import pyHook
import pythoncom
import re
import webbrowser
chars = ""
def pressed_chars(event):
global chars
if event.Ascii:
char = chr(event.Ascii)
if event.Ascii == 3:
quit()
else:
chars += char
print chars
proc = pyHook.HookManager()
proc.KeyDown = pressed_chars
proc.HookKeyboard()
pythoncom.PumpMessages()
Run Code Online (Sandbox Code Playgroud)
使用以下内容扫描QR码时产生以下输出http://google.com:
H
HT
HTT
HTTP
HTTP:
HTTP:?
HTTP:??
HTTP:??G
HTTP:??GO
HTTP:??GOO
HTTP:??GOOG
HTTP:??GOOGL
HTTP:??GOOGLE
HTTP:??GOOGLE>
HTTP:??GOOGLE>C
HTTP:??GOOGLE>CO
HTTP:??GOOGLE>COM
HTTP:??GOOGLE>COM
Run Code Online (Sandbox Code Playgroud)
现在test3.py:
# -*- coding: utf-8 -*-
import pyHook
import pythoncom
import re
import webbrowser
endDomains = ".com|.net|.org|.edu|.gov|.mil|.aero|.asia|.biz|.cat|.coop|.info|.int|.jobs|.mobi|.museum|.name|.post|.pro|.tel|.travel".split("|")
chars = ""
def pressed_chars(event):
global chars
if event.Ascii:
char = chr(event.Ascii)
if event.Ascii == 3:
quit()
else:
chars += char
print chars
proc = pyHook.HookManager()
proc.KeyDown = pressed_chars
proc.HookKeyboard()
pythoncom.PumpMessages()
Run Code Online (Sandbox Code Playgroud)
产生以下输出:
h
ht
htt
http
http;
http;/
http;//
http;//g
http;//go
http;//goo
http;//goog
http;//googl
http;//google
http;//google.
http;//google.c
http;//google.co
http;//google.com
http;//google.com
Run Code Online (Sandbox Code Playgroud)
如果我删除endDomains变量的任何部分,程序会更改.是否有一些我无法看到的字符,我正在删除或改变一些东西?为什么在删除程序甚至不使用的变量时,python会产生这两个完全不同的结果?
编辑:它似乎连接到.split("|"),而不是变量.如果我.split("|")再次删除程序中断.
我使用的原始来源的第二个编辑信用来自他们的回答Janenamuric.
小智 1
您定义 endDomains 的方式不是很“Pythonic”
最好将其定义为列表。
endDomains = [
".com", ".net", ".org", ".edu", ".gov", ".mil", ".aero", ".asia",
".biz", ".cat", ".coop", ".info", ".int", ".jobs", ".mobi", ".museum",
".name", ".post", ".pro", ".tel", ".travel"
]
Run Code Online (Sandbox Code Playgroud)
您是否能够返回该值并获取它,以便在事件之外进行构建?不幸的是我不在Windows上所以我无法测试这个。我确实写了这个:
"""Mock."""
endDomains = [
".com", ".net", ".org", ".edu", ".gov", ".mil", ".aero", ".asia",
".biz", ".cat", ".coop", ".info", ".int", ".jobs", ".mobi", ".museum",
".name", ".post", ".pro", ".tel", ".travel"
]
chars = ""
def pressed_chars(event):
global chars
char = chr(ord(event))
if event == '3':
return False
else:
chars += char
print(chars)
return True
result = True
while result:
string = input("Some input please: ")
for character in string:
result = pressed_chars(character)
print("Done")
Run Code Online (Sandbox Code Playgroud)
这不会遇到同样的问题。所以我预计 pyHook 或 pythoncom 中的问题。另外值得注意的是,全局变量通常不被使用,因为它会增加混乱:Use of "global" keywords in Python
希望有帮助。
| 归档时间: |
|
| 查看次数: |
1112 次 |
| 最近记录: |