在 Windows NT、Windows Server 2003 和 Windows 7+ 上
你根本不需要使用Tkinter
来实现你的目标。
剪辑.py:
import subprocess
def write_to_clipboard(string):
p = subprocess.Popen(['clip'], stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
p.communicate(input=string)
这段代码只是调用标准的 windowsclip.exe
实用程序,粘贴string
变量中传递的任何内容。
用法:
from clip import write_to_clipboard
try:
while True:
write_to_clipboard(raw_input())
except KeyboardInterrupt:
pass
在 Windows 95、98、ME 和 XP 上
那些版本的 windows 不附带clip.exe
,所以这里是一个仅 python 的版本:
剪辑.py:
import subprocess
def write_to_clipboard(string):
p = subprocess.Popen(['python', __file__], stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
p.communicate(input=string)
if __name__ == "__main__":
import sys
from Tkinter import Tk
r = Tk()
r.withdraw()
r.clipboard_clear()
r.clipboard_append(sys.stdin.read())
r.update()
r.destroy()
这将适用于所有版本的 windows 并面对任何支持TK
.
请注意,您必须Tk
像这样在单独的进程中运行代码,因为即使我们调用r.destroy()
,Tk
似乎也“锁定”了剪贴板(在该进程退出之前,没有其他进程可以访问剪贴板)。
阅读和写作剪贴板
如果您希望能够从剪贴板读取和写入,这就是解决方案。
剪辑.py:
import subprocess
def write(string):
p = subprocess.Popen(['python', __file__, 'write'], stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
p.communicate(input=string)
def read():
p = subprocess.Popen(['python', __file__, 'read'], stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
return p.communicate()[0]
if __name__ == "__main__":
import sys
from Tkinter import Tk
if len(sys.argv) != 2:
sys.exit(1)
r = Tk()
try:
r.withdraw()
if sys.argv[1] == "write":
r.clipboard_clear()
r.clipboard_append(sys.stdin.read())
r.update()
elif sys.argv[1] == "read":
sys.stdout.write(r.clipboard_get()),
else:
sys.exit(1)
finally:
r.destroy()
用法:
import clip
print "clipboard contains: %s" % clip.read()