web-dev-qa-db-fra.com

Appelez Python de bash avec argument

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.

66
Jimmy

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
93
duckman_1991

Utilisation

python python_script.py filename

et dans votre Python

import sys
print sys.argv[1]
20
NPE

À côté de sys.argv , regardez également le module argparse , qui aide à définir les options et les arguments des scripts.

Le module argparse facilite l'écriture d'interfaces de ligne de commande conviviales.

15
miku

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

5
user77115

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.

1
Dave Thebuskeruk

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.

0
burseaner