我正在使用KUbuntu 18.04.1
我正在尝试使用眼镜(KUbuntu的屏幕截图应用)和gocr(OCR工具)从屏幕截图中提取文本
如果我在Konsole(KUbuntu终端)中一个接一个地发出命令
第一的:
spectacle -r -b -n -o /home/UserName/Documents/Translate/input.jpg
第二:
gocr -i /home/UserName/Documents/Translate/input.jpg | xsel -b
有用。
如果我创建一个bash文件screen_ts.sh并放入代码
#!/bin/bash
# Dependencies: gocr xsel
# Take Screenshot and Save it to a File
spectacle -r -b -n -o /home/UserName/Documents/Translate/input.jpg
# Extract text from the saved file
gocr -i /home/UserName/Documents/Translate/input.jpg | xsel -b
exit
打开Konsole并输入./screen_ts.sh,它可以工作
但是,如果我将文件设为可执行文件并双击,它将获得屏幕截图,但不会将文本保存在剪贴板中。
再次,如果我使用创建自定义快捷方式
自定义快捷方式>触发Alt + Q
和操作/home/UserName/Documents/Translate/screen_ts.sh
它需要屏幕截图,但不会将文本保存在剪贴板中。 行为与双击相同。
这里发生了什么?
来自man xsel:
默认情况下,如果标准输入和标准输出均为端子(ttys),则此程序将输出选择内容,而无需进行修改。否则,如果标准输出不是端子(tty),则输出当前选择;如果标准输入不是端子(tty),则从标准输入设置选择。如果给出了任何输入或输出选项,则程序仅在请求的模式下运行。
这有点误导,但是在源代码中有一个有趣的注释:
检查stdin / stdout是否为tty并不能可靠地告诉用户想要什么。这是因为子进程继承了其父进程的文件描述符。例如,在脚本中被守护进程(未附加到tty)调用的xsel,或者通过重定向或在管道中调用的xsel,默认情况下将具有非tty文件描述符。重定向/管道问题也适用于外壳程序中的“分组”或“复合”命令(函数,子外壳程序,花括号块,条件,循环等)。在所有这些情况下,用户都必须明确设置操作模式。
...这就是解决方案:通过添加以下选项,xsel
明确指示要读取stdin
的内容-i
:
gocr -i /home/UserName/Documents/Translate/input.jpg | xsel -b -i
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句