У меня есть сценарий Python для перевода текста через командную строку, использование script.py "Hola Mundo"
и вывод будет Hello World
.
Теперь я хочу отправить текст в эту программу через сочетание клавиш в Xubuntu 18.04.1 XFCE, таким образом, я записал сценарий удара translate.sh
и помещенный это вместе с script.py
в /usr/local/bin
, и присвоенный сочетание клавиш с утилитой клавиатуры XFCE к нему. Однако все в сценарии удара работало, кроме строки, которая называет Python.
Если я назову сценарий через терминал, то он будет работать безупречно. Я все еще очень плохо знаком с ударом и не знаю, как получить сообщение об ошибке Python (если таковые имеются) распечатанный, когда я называю сценарий удара через сочетание клавиш XFCE.
У кого-либо есть идея, что происходит и какова проблема?
Мой сценарий удара 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 #!/usr/bin/env python
.
Я узнал причину, почему она не работает благодаря подсказкам по отладке от @wjandrea.
Были пропавшие без вести модулей Python, потому что интерпретатор Python / используемая среда /usr/bin/python
, вместо версии Анаконды, с которой я установил зависимости. Кажется, что вызов сценария Python с сочетаниями клавиш XFCE не уважает $PATH
переменная настраивается внутри .bashrc
файл (потому что мы не выполняем оболочку в интерактивном режиме).
Решение состоит в том, чтобы просто указать правильный интерпретатор Python, который будет использоваться в строке хижины в сценарии Python. Мой похож #!/home/jexplorer/anaconda3/bin/python
.
Или, альтернативно и предпочтительно, настроенный $PATH
переменная внутри .profile
файл вместо .bashrc
.
Я не уверен в первопричине, но отлаживать сценарий, можно использовать exec
перенаправить весь вывод в файл. Например. exec 1> ~/output.txt 2>&1
Между прочим, предпочтительно использовать более новое $()
синтаксис вместо обратных галочек ``
, всегда используйте строчные имена переменной (чтобы не случайно перезаписывать переменную среды/оболочки) и всегда заключайте любые расширения в кавычки (как 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"