于绝境处竟然峰回路转,我把过程写出来供您参考,找到的这些方法处理英文字符都没问题。
首先声明代码都不是原创,我很浮躁不求甚解,自己给自己找的借口是杂事太多,无法沉下心来扎扎实实把技术文档啃明白。遇到拦路虎就是搜搜搜滴找无私分享的网友的代码拿过来改,所以会有明明网友的代码可以解决我的问题,但我照葫芦画瓢没领会精髓,不知变通进而以为解决不了我的问题。
机器是Mac,IDE是pycharm,Python版本是3.6;我是要控制键盘把把变量里的中文字符输出到文本框里,假设变量txt='沧海一声笑'。
第一次尝试:
import pyautogui
pyautogui.typewrite(txt)
运行结果是直接跳过不输出,后来反应过来pyautogui.typewrite()是模拟按键,显然中文无法用单纯按键输出。
遂决定用剪切板做下中转站,即先把变量里的中文字符弄到剪切板里,然后控制键盘ctrl+v或直接输出剪切板内容的函数辗转把中文字符输出。
第二次尝试:
import pyperclip
pyperclip.copy('浮世繁华')
ctrl+v出来的是乱码,网上搜了半天貌似pyperclip模块没解决这个问题,决定试试其他提供同样功能的模块。
第三次尝试:
import clipboard
clipboard.copy('天龙八部')
还是乱码
搜索引擎上敲入python3 write Chinese character to clipboard之类继续搜,发现了Mac上有条命令pbcopy,比如在terminal上敲入'echo 雪山飞狐|pbcopy',雪山飞狐就进剪切板里了,大喜过望,想通过subprocess在python程序中执行这条命令以期达到目的。subprocess我了解的很粗浅,会最简单的应用而已,所以上来就...
第四次尝试:
import subprocess
subprocess.run(['echo', '射雕‘,’|pbcopy'])
运行结果是:射雕|pbcopy,意识到糊弄不过去,得用PIPE。只好找来subprocess的技术文档,艾玛,两眼直发黑,太他么复杂了!找别人写好的例子网上套套看
第五次尝试:
import subprocess
# write a Uncode string to the Mac clipboard
defwrite_to_clipboard(output):
process = subprocess.Popen(
'pbcopy', env={'Lang': 'zh_CN.UTF-8'}, stdin=subprocess.PIPE)
process.communicate(output.encode('utf-8'))
write_to_clipboard('快乐')
输出竟然乱码,原来代码的locale参数是en_US.UTF-8,改回去也不行,烦死人了!而且这不已经是UTF-8了么?怎么中文还是不行?!
第六次尝试:
又去找了段代码
proc1 = subprocess.Popen(['echo', '陆小凤'], stdout=subprocess.PIPE)
proc2 =subprocess.Popen(['pbcopy'], stdin=proc1.stdout, stdout=subprocess.PIPE)
proc1.stdout.close()
out, err = proc2.communicate()
乱码
后来好像还试了subprocess.check_output()也没弄出来,我得再声明自己功力太浅,而且也没坐下来认真专研,就是不停地试图找捷径。subprocess功能这么强大,可能可以解决这个问题,如果用PIPE把echo ‘陆小凤“接收,然后作为下一个进程的输入,中间的流好像是byte类型,至于说能不能中间转成utf-8再做输入实在没耐心也没时间研究。编码转码部分我很混乱,也很打怵。
最后是这段代码嵌入到我的实验代码中实现了我要的功能:
try:
from Tkinter import Tk
exceptImportError:
from tkinter import Tk
r = Tk()
r.withdraw()
r.clipboard_clear()
r.clipboard_append('两两相忘')
r.update() # now it stays on the clipboard after the window is closed
r.destroy()
还没往大代码里加,希望别再出幺蛾子了,力气和耐心快耗光了,如果没问题我到时候再解释。我怕把这个过程给忘了,所以赶紧用文字记录下来,希望能对您有所启发,更希望得到您的指点!