在python中将字符串队列发送到剪贴板

时间:2013-10-19 14:46:26

标签: python ocr xclip

我正在编写一个在后台运行的程序,并检查文件夹中的文件更改,如果有任何新的图像文件到达该文件夹,它将在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,我们都应该检测到...在此先感谢

1 个答案:

答案 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测试按键的代码,然后将它们放在一起以完成您想要的操作:)