【发布时间】:2017-11-17 02:57:37
【问题描述】:
我有一个 python 脚本,它需要将一些值输出到标准输入并将另一个字符串复制到剪贴板。我正在使用模块subprocess 通过Popen 执行xclip 实用程序,如下所示:
# clip.py
import subprocess
from subprocess import Popen
print('PRINT_ME')
p1 = Popen(['xclip', '-selection', 'clipboard'], stdin=subprocess.PIPE)
p1.communicate(input=('PASTE_ME'.encode()))
脚本按预期工作:PRINT_ME 在 bash 中回显,PASTE_ME 可以粘贴,并立即返回。
将脚本输出通过管道传输到另一个命令时会出现问题。假设一个人想使用tee 重定向到一个文件和标准输入:
$ python clip.py|tee file.txt
程序按预期工作但不返回,即 shell 不交还控制权。
如何解决这个问题?
一些重要信息:xclip 实用程序 forks 本身(以应对 X 上剪贴板的实现)在 shell 中使用时维护可复制的字符串立即返回(它分叉到后台)。似乎外壳将clip.py 和xclip stdin/stdout 都附加到tee。
如果使用ps u 找到xclip -selection clipboard 并杀死命令返回。
我使用的是 Python 3.4。
谢谢
【问题讨论】:
标签: python shell subprocess piping xclip