Вызов Python из сценария удара, не работающего с сочетанием клавиш XFCE

У меня есть сценарий 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.

1
задан 16 August 2018 в 16:49

2 ответа

Я узнал причину, почему она не работает благодаря подсказкам по отладке от @wjandrea.

Были пропавшие без вести модулей Python, потому что интерпретатор Python / используемая среда /usr/bin/python, вместо версии Анаконды, с которой я установил зависимости. Кажется, что вызов сценария Python с сочетаниями клавиш XFCE не уважает $PATH переменная настраивается внутри .bashrc файл (потому что мы не выполняем оболочку в интерактивном режиме).

Решение состоит в том, чтобы просто указать правильный интерпретатор Python, который будет использоваться в строке хижины в сценарии Python. Мой похож #!/home/jexplorer/anaconda3/bin/python.


Или, альтернативно и предпочтительно, настроенный $PATH переменная внутри .profile файл вместо .bashrc.

0
ответ дан 7 December 2019 в 15:15

Я не уверен в первопричине, но отлаживать сценарий, можно использовать 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"
1
ответ дан 7 December 2019 в 15:15

Другие вопросы по тегам:

Похожие вопросы: