我有一个通过命令行翻译文本的 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
。