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



我正在编写一个在后台运行的程序,如果有任何新的图像文件到达该文件夹,它将在tesseract OCR引擎的帮助下从该图像中读取文本.Images包含Employees.python程序将该地址拆分为单独的列表。

我想将每个地址部分一个接一个地放入剪贴板。因此,如果我按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和GUI应用程序上按键。每当在任何应用程序中触发 Ctrl+V 时,我们都应该检测到......提前致谢

好的,所以,这是怎么回事:

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 测试按键的代码,然后将其放在一起以执行您希望它:)

最新更新