web-dev-qa-db-fra.com

Saisie utilisateur et arguments de ligne de commande

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?

488
Teifion

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: optparse (obsolète depuis Python 2.7, utilisez plutôt argparse ) et getopt . Si vous souhaitez simplement entrer des fichiers dans votre script, voyez le pouvoir de fileinput .

La référence de la bibliothèque Python est votre ami.

440
Antti Rasinen
var = raw_input("Please enter something: ")
print "you entered", var

Ou pour Python 3:

var = input("Please enter something: ")
print("You entered: " + var)
451
lbz

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) 

Documentation du changement

201
steampowered

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.

33
Dave Webb

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

18
Vhaerun

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'>
13
Viswesn

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

10
Simon Peverett

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)
9
Matt Olan

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
6
CorpseDead

À partir de Python 3.2 2.7, il existe maintenant argparse pour le traitement des arguments en ligne de commande.

6
GreenMatt

Dans Python 2:

data = raw_input('Enter something: ')
print data

Dans Python 3:

data = input('Enter something: ')
print(data)
2
Mark
import six

if six.PY2:
    input = raw_input

print(input("What's your name? "))
1
Will Charlton