Je sais que je peux exécuter un script python à partir de mon script bash en utilisant les éléments suivants:
python python_script.py
Mais qu'en est-il si je voulais passer une variable/un argument à mon python script de mon script bash. Comment puis-je faire cela?
En gros, bash établira un nom de fichier, puis python le téléchargera, mais je dois envoyer le nom de fichier de bash à python lorsque je l'appellerai.
Pour exécuter un script python dans un script bash, vous devez appeler la même commande que vous le feriez dans un terminal. Par exemple
> python python_script.py var1 var2
Pour accéder à ces variables dans python vous aurez besoin de
import sys
print sys.argv[0] # prints python_script.py
print sys.argv[1] # prints var1
print sys.argv[2] # prints var2
Utilisation
python python_script.py filename
et dans votre Python
import sys
print sys.argv[1]
Option intégrée:
Wrap python code dans une fonction bash.
#!/bin/bash
function current_datetime {
python - <<END
import datetime
print datetime.datetime.now()
END
}
# Call it
current_datetime
# Call it and capture the output
DT=$(current_datetime)
echo Current date and time: $DT
Utilisez des variables d’environnement pour transmettre des données à votre script incorporé python.
#!/bin/bash
function line {
PYTHON_ARG="$1" python - <<END
import os
line_len = int(os.environ['PYTHON_ARG'])
print '-' * line_len
END
}
# Do it one way
line 80
# Do it another way
echo $(line 80)
http://bhfsteve.blogspot.se/2014/07/embedding-python-in-bash-scripts.html
J'ai un script bash qui appelle une petite routine python pour afficher une fenêtre de message. Comme je dois utiliser killall pour arrêter le script python, je ne peux pas utilisez la méthode ci-dessus car cela signifierait alors exécuter killall python qui pourrait supprimer d'autres python programmes donc j'utilise
pythonprog.py "$argument"
& # Le contrôle & retourne directement au script bash, il doit donc être en dehors des backticks. L'aperçu de ce message l'affiche sans "` "de part et d'autre de la commande pour une raison quelconque.
Tant que le script python sera exécuté à partir du cli par nom plutôt que python pythonprog.py, cela fonctionnera dans le script. Si vous avez besoin de plus d'un argument utilisez simplement un espace entre chacun dans les guillemets.
utiliser dans le script:
echo $(python python_script.py arg1 arg2) > /dev/null
ou
python python_script.py "string arg" > /dev/null
Le script sera exécuté sans sortie.