J'ai un script python pour traduire le texte via la ligne de commande, l'utilisation est script.py "Hola Mundo"
et le résultat sera Hello World
.
Maintenant, je veux envoyer du texte à ce programme via un raccourci clavier dans XubCE 18.04.1 Xubuntu, aussi j’ai écrit un script bash translate.sh
et le mets avec script.py
dans /usr/local/bin
, et attribué un raccourci clavier avec l'utilitaire de clavier XFCE. Cependant, tout dans le script bash fonctionnait, à l'exception de la ligne qui appelle Python.
Si j'appelle le script via un terminal, cela fonctionnera parfaitement. Je suis encore très nouveau sur bash et je ne sais pas comment obtenir le message d'erreur de Python (le cas échéant), lorsque j'appelle le script bash via le raccourci clavier XFCE.
Quelqu'un a une idée de ce qui se passe et du problème?
Mon script 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"
Notez que si j'exécute ce script dans le terminal, tout fonctionne - la notification s'affiche et je peux voir que le résultat est répercuté dans le terminal. Lors de l'appel de ce script avec un raccourci clavier, la fenêtre contextuelle apparaît avec le texte sélectionné comme titre de notification, mais il n'y a pas de corps. (Prouver que la ligne python ne fonctionnait pas.)
La ligne Shebang dans le script Python est #!/usr/bin/env python
.
J'ai découvert la raison pour laquelle cela ne fonctionne pas, grâce aux conseils de débogage de @wjandrea.
Il manquait Python modules, car l'interpréteur/environnement Python utilisé est /usr/bin/python
, à la place de la version Anaconda avec laquelle j'ai installé les dépendances. Il semble que l'appel du script python avec des raccourcis clavier XFCE ne respecte pas la variable $PATH
définie à l'intérieur de .bashrc
fichier (car nous sommes ne pas exécuter le shell de manière interactive ).
La solution consiste simplement à spécifier le bon interprète Python à utiliser dans la ligne Shebang du script Python. Le mien ressemble à #!/home/jexplorer/anaconda3/bin/python
.
ou , alternativement et de préférence, configurez la variable $PATH
à l'intérieur de .profile
fichier au lieu de .bashrc
.
Je ne suis pas sûr de la cause première du problème, mais pour déboguer le script, vous pouvez utiliser exec
pour rediriger toutes les sorties dans un fichier. Par exemple. exec 1> ~/output.txt 2>&1
En passant, il est préférable d’utiliser la syntaxe plus récente $()
au lieu de backticks ``
, de toujours utiliser des noms de variable minuscules (pour éviter d’écraser accidentellement une variable d’environnement/Shell), et de toujours citer les extensions (comme echo "$RESULT"
).
Donc en somme:
#!/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"