将所选文本发送到命令行参数

时间:2009-12-07 01:25:15

标签: python terminal clipboard ubuntu-9.04 google-translate

我找到了这个实用程序pytranslate,它使用Google的翻译API将各种语言相互翻译。它完全按照描述工作。

然而,我已经厌倦了选择一个我不理解的单词,然后在命令中间点击它。命令格式如下:

pytranslate WORD

是否有程序/脚本能够检测我何时用鼠标选择单词或一系列单词,然后在终端窗口中用WORD代替所选文本执行上述命令?

示例:

选定文字:

Bonjour mondiale...

结果命令/结果:

pytranslate Bonjour mondiale
Detected source language: fr
Hello World

4 个答案:

答案 0 :(得分:4)

#!/bin/bash
pytranslate "$(xsel -p)"

现在把它放在~/bin中(确保它包含在你的PATH中),并运行它。 (您可能需要安装xsel包。)它将获取主选择缓冲区的当前内容并将其传递给pytranslate。

如果你想把它作为一个按钮,创建一个在终端中运行它的启动器,并使用bash的read命令来执行“按ENTER继续”。

答案 1 :(得分:2)

从Roger Pate的精彩内容中汲取灵感,我为pytranslate创建了一个简单的循环脚本。这是暂时的 - 因为我还没有实现错误捕获 - 等待新的编辑。

#!/bin/bash
# Primary Clipboard poller using xsel (middle click) and pytranslate
# Checks for changes every 1 second
# If change has occured, a command is executed (pytranslate here)
########## Information ########## 
# It now stores definitions in a text file - saves bandwith and reduces hits on google (caseless)
# Works for Romance languagse
#TODO
# Character based langauges
# Catch errors

if [ ! -e "pytranslatecache" ]; then
touch pytranslatecache
fi

while [ 1 ]
do
   OLDENTRY="$(xsel -p)"
   sleep 1
   NEWENTRY="$(xsel -p)"
   if [ "$NEWENTRY" != "$OLDENTRY" ] ; then
     if [ "$(grep -F -o -i "$NEWENTRY" pytranslatecache)" = "$NEWENTRY" ] ; then
    echo "From Cache:"
        echo "$(grep -i "$NEWENTRY" pytranslatecache)" 
     else
    DEFINITION=""$(pytranslate -s fr "$(xsel -p)")""
        echo "$NEWENTRY"":"$DEFINITION
        echo "$NEWENTRY"":"$DEFINITION >> pytranslatecache
     fi
   fi
# Catch Errors - Commands
   if [ $? != 0 ]; then
   {
       echo "Failed to translate string."
    } fi
done

答案 2 :(得分:1)

您是否可以使用PyGTK包中的剪贴板支持来完成这项工作?它声称可以访问“主”X剪贴板,它通常是您通常可以找到所选文本的位置。

答案 3 :(得分:0)

注意:这个答案对于没有使用Windows的提问者毫无用处。鉴于标题没有指定操作系统,我会留给那些可能会这样的Windows用户。


您可以使用pywin32软件包和win32clipboard模块轻松自己动手。例如,请参阅this question

我在过去做过这个过程,只是每隔几秒左右定期轮询剪贴板,每当发现变化时,它就会抓住内容并用它做一些事情。在您的情况下,使用子进程包调用pytranslate文本。