コマンドライン経由でテキストを翻訳するpythonスクリプトがあり、使用法はscript.py "Hola Mundo"
で、出力はHello World
になります。
Xubuntu 18.04.1 XFCEのキーボードショートカットを介してこのプログラムにテキストを送信したいので、bashスクリプトtranslate.sh
を作成し、script.py
と一緒に/usr/local/bin
にまとめました。 XFCEキーボードユーティリティを使用してキーボードショートカットを割り当てました。ただし、Pythonを呼び出す行を除き、bashスクリプト内のすべてが機能しました。
ターミナル経由でスクリプトを呼び出すと、問題なく動作します。私はまだ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
です。
@wjandreaのデバッグのヒントのおかげで、機能しない理由を見つけました。
使用されているPythonインタープリター/環境は、依存関係をインストールしたAnacondaバージョンではなく、/usr/bin/python
であるため、Pythonモジュールが欠落していました。 XFCEキーボードショートカットでpythonスクリプトを呼び出しても、$PATH
ファイル内に設定された.bashrc
変数は尊重されないようですシェルをインタラクティブに実行しない )。
解決策は、Pythonスクリプト内のShebang行で使用する正しいPythonインタープリターを指定するだけです。私のものは#!/home/jexplorer/anaconda3/bin/python
のように見えます。
Or、あるいは、できれば、$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"