我正在编写一个在后台运行的程序,并检查文件夹中的文件更改,如果有任何新的图像文件到达该文件夹,它将在tesseract OCR Engine的帮助下从该图像中读取文本。图像包含员工的地址。 python程序将Adress拆分为单独的列表。
我想将每个地址部分一个接一个地放入剪贴板。所以如果我按下Ctrl + V,第一部分将被粘贴。如果我按下Ctrl + v,则下一部分下一部分会像明智一样粘贴。
这是守则。
#!/usr/bin/python
import commands,os
global vdir,outfile
global prev
vdir="Vilvin"
out="Output"
a=os.listdir(vdir)
prev=len(a)
whcount=0
stat_dict={'NEW HRMPSHIRE': 'NEW HAMPSHIRE', 'VERMONT': 'VERMONT', 'LOUISIRNR': 'LOUISIANA', 'CRLIFORNIR': 'CALIFORNIA', 'MISSISSIPPI': 'MISSISSIPPI', 'PENNSYLVRNIR': 'PENNSYLVANIA', 'MONTRNR': 'MONTANA', 'GEORGIR': 'GEORGIA', 'WRSHINGTON': 'WASHINGTON', 'NEW YORK': 'NEW YORK', 'MRRYLRND': 'MARYLAND', 'IOWR': 'IOWA', 'SOUTH DRKOTR': 'SOUTH DAKOTA', 'VIRGINIR': 'VIRGINIA', 'FLORIDR': 'FLORIDA', 'MRINE': 'MAINE', 'NEBRRSKR': 'NEBRASKA', 'RLRSKR': 'ALASKA', 'ILLINOIS': 'ILLINOIS', 'CONNECTICUT': 'CONNECTICUT', 'TENNESSEE': 'TENNESSEE', 'NEW MEXICO': 'NEW MEXICO', 'COLORRDO': 'COLORADO', 'DELRWRRE': 'DELAWARE', 'HRWRII': 'HAWAII', 'NORTH CRROLINR': 'NORTH CAROLINA', 'UTRH': 'UTAH', 'RLRBRMR': 'ALABAMA', 'MICHIGRN': 'MICHIGAN', 'RRKRNSRS': 'ARKANSAS', 'NEW JERSEY': 'NEW JERSEY', 'MISSOURI': 'MISSOURI', 'OREGON': 'OREGON', 'WYOMING': 'WYOMING', 'OHIO': 'OHIO', 'WISCONSIN': 'WISCONSIN', 'MINNESOTR': 'MINNESOTA', 'KRNSRS': 'KANSAS', 'RHODE ISLRND': 'RHODE ISLAND', 'WEST VIRGINIR': 'WEST VIRGINIA', 'IDRHO': 'IDAHO', 'OKLRHOMR': 'OKLAHOMA', 'KENTUCKY': 'KENTUCKY', 'RRIZONR': 'ARIZONA', 'NEVRDR': 'NEVADA', 'INDIRNR': 'INDIANA', 'MRSSRCHUSETTS': 'MASSACHUSETTS', 'SOUTH CRROLINR': 'SOUTH CAROLINA', 'NORTH DRKOTR': 'NORTH DAKOTA', 'TEXRS': 'TEXAS'}
while True:
instant=os.listdir(vdir)
if(len(instant)>prev):
print "File Change Detected...."
r=commands.getoutput('ls -ct1 '+vdir+' | head -1')
print "Most recent file = %s " %(r)
r=r.replace("(","\(")
r=r.replace(")","\)")
r=r.replace(" ","\ ")
os.system("tesseract "+vdir+"/"+r+" "+out+"/"+"Output")
result=commands.getoutput("awk -F: '{ print $2 $3 }' "+out+"/"+"Output.txt")
res=result.split("\n")
state=res[0].split("State")
profile=res[1].split("Pro?ile")
applicant=state[0].strip().replace("R","A")
state=state[1].strip()
state=stat_dict[state]
sid=profile[0].strip()
profile=profile[1].strip().replace("R","A")
sec=res[3].strip().replace("R","A")
a=commands.getoutput("echo \""+applicant+"\" | xclip -verbose -selection clipboard")
b=commands.getoutput("echo \""+state+"\" | xclip -verbose -selection clipboard")
c=commands.getoutput("echo \""+sid+"\" | xclip -verbose -selection clipboard")
d=commands.getoutput("echo \""+profile+"\" | xclip -verbose -selection clipboard")
e=commands.getoutput("echo \""+sec+"\" | xclip -verbose -selection clipboard")
print "Applicant : "+applicant+"\nState : "+state+"\nStaff ID : "+sid+"\nProfile : "+profile+"\nSEC : "+sec+"\n"
prev=len(instant)
else:
whcount=whcount+1
print "While Loop Count : "+str(whcount)+"\n"
os.system("sleep 2")
我忘记的一件事是这个程序总是在后台运行&终端窗口最小化,因此我们必须在整个Xsession& amp; GUI应用程序..无论何时在任何应用程序中触发Ctrl + V,我们都应该检测到...在此先感谢
答案 0 :(得分:0)
好的,所以,这是怎么回事:
import time,os,win32api
from msvcrt import getch
def addToClipBoard(text):
command = 'echo ' + text.strip() + '| clip'
os.system(command)
def testpress(key):
return (win32api.GetKeyState(key) & (1 << 7)) != 0
key = 17 #ctrl key
key2= ord('V')
copy=1
while True:
keydown = testpress(key)
key2down = testpress(key2)
if keydown and key2down:
print 'CtrlV pressed!'
if copy==1:
addToClipBoard('Foo')
elif copy==2:
addToClipBoard('Shoo')
elif copy==3:
addToClipBoard('THA END')
if copy>3:
exit(1)
copy+=1
time.sleep(0.10)
我从另一个答案中获取了使用win32api测试按键的代码,然后将它们放在一起以完成您想要的操作:)