Comment puis-je avoir un script Python qui a) peut accepter les entrées de l'utilisateur et comment le faire b) lire les arguments s'il est exécuté à partir de la ligne de commande?
Pour lire les entrées utilisateur, vous pouvez essayer le module cmd
permettant de créer facilement un interpréteur de mini-lignes de commande (avec textes d'aide et autocomplétion) et raw_input
( input
pour Python 3+) pour lire une ligne de texte de l'utilisateur.
_text = raw_input("Prompt") # Python 2
text = input("Prompt") # Python 3
_
Les entrées de ligne de commande sont au format _sys.argv
_. Essayez ceci dans votre script:
_import sys
print (sys.argv)
_
Il existe deux modules pour analyser les options de ligne de commande: (obsolète depuis Python 2.7, utilisez plutôt optparse
argparse
) et getopt
. Si vous souhaitez simplement entrer des fichiers dans votre script, voyez le pouvoir de fileinput
.
var = raw_input("Please enter something: ")
print "you entered", var
Ou pour Python 3:
var = input("Please enter something: ")
print("You entered: " + var)
raw_input
n'est plus disponible dans Python 3.x. Mais raw_input
a été renommé input
, de sorte que la même fonctionnalité existe.
input_var = input("Enter something: ")
print ("you entered " + input_var)
Le meilleur moyen de traiter les arguments de ligne de commande est le module argparse
.
Utilisez raw_input()
pour obtenir les entrées de l'utilisateur. Si vous importez le readline module
, vos utilisateurs auront l'édition et l'historique en ligne.
Attention à ne pas utiliser la fonction input
, à moins que vous ne sachiez ce que vous faites. Contrairement à raw_input
, input
acceptera n'importe quelle expression python, donc c'est un peu comme eval
Ce programme simple vous aide à comprendre comment alimenter l’utilisateur en ligne de commande et à montrer de l’aide pour passer un argument invalide.
import argparse
import sys
try:
parser = argparse.ArgumentParser()
parser.add_argument("square", help="display a square of a given number",
type=int)
args = parser.parse_args()
#print the square of user input from cmd line.
print args.square**2
#print all the sys argument passed from cmd line including the program name.
print sys.argv
#print the second argument passed from cmd line; Note it starts from ZERO
print sys.argv[1]
except:
e = sys.exc_info()[0]
print e
1) Trouver la racine carrée de 5
C:\Users\Desktop>python -i emp.py 5
25
['emp.py', '5']
5
2) Passer un argument invalide autre que nombre
C:\Users\bgh37516\Desktop>python -i emp.py five
usage: emp.py [-h] square
emp.py: error: argument square: invalid int value: 'five'
<type 'exceptions.SystemExit'>
Utilisez 'raw_input' pour une entrée depuis une console/un terminal.
si vous voulez juste un argument en ligne de commande comme un nom de fichier ou quelque chose comme ça.
$ python my_prog.py file_name.txt
alors vous pouvez utiliser sys.argv ...
import sys
print sys.argv
sys.argv est une liste où 0 est le nom du programme. Ainsi, dans l'exemple ci-dessus, sys.argv [1] correspond à "nom_fichier.txt".
Si vous souhaitez avoir des options complètes en ligne de commande, utilisez le module optparse.
Pev
Si vous exécutez Python <2.7, vous avez besoin de optparse , qui, comme l'explique la doc, créera une interface pour les arguments de ligne de commande appelés lors de l'exécution de votre application.
Toutefois, dans Python ≥2.7, optparse est obsolète et a été remplacé par le paramètre argparse , comme indiqué ci-dessus. Un exemple rapide tiré de la documentation ...
Le code suivant est un programme Python qui prend une liste d’entiers et produit la somme ou le maximum:
import argparse
parser = argparse.ArgumentParser(description='Process some integers.')
parser.add_argument('integers', metavar='N', type=int, nargs='+',
help='an integer for the accumulator')
parser.add_argument('--sum', dest='accumulate', action='store_const',
const=sum, default=max,
help='sum the integers (default: find the max)')
args = parser.parse_args()
print args.accumulate(args.integers)
S'il s'agit d'une version 3.x, utilisez simplement:
variantname = input()
Par exemple, vous voulez entrer 8:
x = input()
8
x sera égal à 8 mais ce sera une chaîne sauf si vous le définissez autrement.
Donc, vous pouvez utiliser la commande convert, comme:
a = int(x) * 1.1343
print(round(a, 2)) # '9.07'
9.07
À partir de Python 3.2 2.7, il existe maintenant argparse pour le traitement des arguments en ligne de commande.
Dans Python 2:
data = raw_input('Enter something: ')
print data
Dans Python 3:
data = input('Enter something: ')
print(data)
import six
if six.PY2:
input = raw_input
print(input("What's your name? "))