Je sais que je peux exécuter un script python à partir de mon script bash en utilisant ce qui suit:
python python_script.py
Mais qu'en est-il si je voulais passer une variable / argument à mon script python à partir de mon script bash. Comment puis je faire ça?
Fondamentalement, 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'appelle.
python python_script.py
dans votre shell par défaut dans Debian, vous utilisez déjà bash ... alors faites simplement dans votre script bash:python python_script.py arg1 arg2 ...
Réponses:
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
import sys print sys.argv[0] # prints python_script.py print sys.argv[1] # prints var1 print sys.argv[2] # prints var2
la source
Utilisation
python python_script.py filename
et dans votre script Python
import sys print sys.argv[1]
la source
À côté
sys.argv
, jetez également un œil au module argparse , qui permet de définir les options et les arguments des scripts.la source
Option intégrée:
Enveloppez le code python 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 python intégré.
#!/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
la source
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.
la source
J'ai un script bash qui appelle une petite routine python pour afficher une fenêtre de message. Comme j'ai besoin d'utiliser killall pour arrêter le script python, je ne peux pas utiliser la méthode ci-dessus car cela signifierait alors exécuter killall python qui pourrait supprimer d'autres programmes python donc j'utilise
pythonprog.py "$argument"
& # Le & renvoie le contrôle directement au script bash donc doit être en dehors des backticks. L'aperçu de ce message l'affiche sans "` "l'un ou l'autre côté de la commande pour une raison quelconque.Tant que le script python s'exécutera à partir du cli par son nom plutôt que de python pythonprog.py, cela fonctionne dans le script. Si vous avez besoin de plus d'un argument, utilisez simplement un espace entre chacun d'eux entre les guillemets.
la source
et jetez un œil au module getopt . Cela fonctionne assez bien pour moi!
la source