Question

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?

Était-ce utile?

La solution

Pour lire les entrées des utilisateurs, vous pouvez essayer le cmd module pour vous faciliter la tâche. création d'un mini interpréteur de ligne de commande (avec les textes d'aide et l'auto-complétion) et raw_input ( input pour Python 3+) pour lire un 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 dans sys.argv. Essayez ceci dans votre script:

import sys
print (sys.argv)

Deux options permettent d'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 la référence de la bibliothèque Python est votre ami.

Autres conseils

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 input a été renommé <=>, la même fonctionnalité existe donc.

input_var = input("Enter something: ")
print ("you entered " + input_var) 

Documentation de la modification

Faites attention à ne pas utiliser la fonction input, à moins que vous ne sachiez ce que vous faites. Contrairement à raw_input, eval acceptera toute expression python, donc c'est un peu comme <=>

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) Pour 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 par exemple.

$ 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] serait & "nom_fichier.txt &";

.

Si vous souhaitez avoir des options complètes en ligne de commande, utilisez le module optparse.

Pev

Si vous utilisez Python < 2.7, vous devez 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.

Cependant, dans Python & # 8805; 2.7, optparse est obsolète et a été remplacé par 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 soit la somme, soit 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)

Depuis Python 3.2 2.7, il existe désormais argparse pour le traitement des arguments de ligne de commande.

S'il s'agit d'une version 3.x, utilisez simplement:

variantname = input()

Par exemple, vous souhaitez entrer 8:

x = input()
8

x sera égal à 8 mais ce sera une chaîne sauf si vous le définissez autrement.

Vous pouvez donc utiliser la commande convert, par exemple:

a = int(x) * 1.1343
print(round(a, 2)) # '9.07'
9.07

En Python 2:

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

En Python 3:

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

if six.PY2:
    input = raw_input

print(input("What's your name? "))
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top