使用 XFCE 键盘快捷键无法从 bash 脚本调用 Python

使用 XFCE 键盘快捷键无法从 bash 脚本调用 Python

我有一个通过命令行翻译文本的 python 脚本,用法是script.py "Hola Mundo",输出是Hello World

现在我想通过 Xubuntu 18.04.1 XFCE 中的键盘快捷键向该程序发送文本,因此我编写了一个 bash 脚本translate.sh并将其与 放在一起script.py/usr/local/bin并为其分配了带有 XFCE 键盘实用程序的键盘快捷键。但是,bash 脚本中的所有内容都有效,除了调用 Python 的那一行。

如果我通过终端调用脚本,它将完美运行。我对 bash 还很陌生,当我通过 XFCE 键盘快捷键调用 bash 脚本时,不知道如何打印出 Python 的错误消息(如果有的话)。

有人知道发生了什么事以及问题是什么吗?

我的bash脚本translate.sh

#!/usr/bin/env bash

TEXT=`xsel -o`
RESULT=`python /usr/local/bin/script.py "$TEXT"`
# or RESULT=`script.py "$TEXT"` (I've put shebang in the python script too) 
# neither worked with keyboard shortcut, both worked in terminal
echo $RESULT # for debugging in terminal

notify-send --icon=info "$TEXT" "$RESULT"

注意如果我在终端运行这个脚本,一切都会正常- 弹出通知,我也可以在终端中看到结果回显。使用键盘快捷键调用此脚本时,弹出窗口以所选文本作为通知标题,但没有正文。(证明只有 Python 行不起作用。)

Python 脚本中的 shebang 行是#!/usr/bin/env python

答案1

我不确定根本原因,但是为了调试脚本,您可以使用exec将所有输出重定向到文件。例如exec 1> ~/output.txt 2>&1

顺便说一句,最好使用较新的$()语法而不是反引号``,始终使用小写变量名(以避免意外覆盖环境/shell 变量),并始终引用任何扩展(如echo "$RESULT")。

综上所述:

#!/usr/bin/env bash

exec 1> ~/output.txt 2>&1  # For debugging

text="$(xsel -o)"
result="$(script.py "$text")"

echo "$result"  # For debugging in terminal
notify-send --icon=info "$text" "$result"

答案2

感谢@wjandrea 提供的调试提示,我找到了它不起作用的原因。

由于使用的 Python 解释器/环境是 ,而不是我安装依赖项时使用的 Anaconda 版本,因此缺少 Python 模块/usr/bin/python。似乎使用 XFCE 键盘快捷键调用 Python 脚本不尊重$PATH在文件中设置的变量(.bashrc因为我们没有以交互方式运行 shell)。

解决方案很简单,只需在 Python 脚本中的 shebang 行中指定要使用的正确 Python 解释器即可。我的解决方案如下#!/home/jexplorer/anaconda3/bin/python


或者$PATH,或者最好地,在文件内部设置变量.profile而不是.bashrc

相关内容