Frage

Wie habe ich einen Python-Skript, das a) eine Benutzereingabe annehmen kann und wie mache ich es b) liest Argumente, wenn von der Kommandozeile ausgeführt werden?

War es hilfreich?

Lösung

Benutzereingabe lesen Sie der cmd Modul versuchen kann leicht eine Schaffung Mini-Kommandozeileninterpreter (mit Hilfetexten und automatische Vervollständigung) und raw_input ( input Python 3+) für eine Textzeile von dem Benutzer das Lesen .

text = raw_input("prompt")  # Python 2
text = input("prompt")  # Python 3

Kommandozeilen-Eingänge sind in sys.argv. Versuchen Sie dies in Ihrem Skript:

import sys
print (sys.argv)

Es gibt zwei Module für die Kommandozeilenoptionen Parsen: optparse (veraltet, da Python 2.7, verwenden Sie argparse statt) und getopt . Wenn Sie nur zur Eingabe von Dateien auf Ihrem Skript möchten, siehe die Macht der fileinput .

Die Python-Bibliothek Referenz ist dein Freund.

Andere Tipps

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

oder für Python 3:

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

raw_input ist nicht mehr verfügbar in Python 3.x Aber raw_input wurde umbenannt input, so dass die gleiche Funktionalität vorhanden ist.

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

Dokumentation der Änderung

Der beste Weg, Befehlszeilenargumente zu verarbeiten, ist das argparse Modul.

Mit raw_input() auf Benutzereingaben zu erhalten. Wenn Sie importieren die readline module Ihre Benutzer Zeilenbearbeitung haben und Geschichte.

Sorgfältige nicht die input Funktion zu nutzen, es sei denn, Sie wissen, was Sie tun. Im Gegensatz zu raw_input wird input jeden Python Ausdruck annehmen, also ist es ein bisschen wie eval

Dieses einfache Programm hilft Ihnen, zu verstehen, wie die Benutzereingabe von der Kommandozeile zu füttern und zu Hilfe zu zeigen, auf ungültiges Argument übergeben.

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) Um die Quadratwurzel von 5 zu finden

C:\Users\Desktop>python -i emp.py 5
25
['emp.py', '5']
5

2) Passing ungültiges Argument andere als Nummer

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

Use 'raw_input' für die Eingabe von einer Konsole / Terminal.

Wenn Sie nur ein Befehlszeilenargument wie ein Dateiname oder etwas z.B.

$ python my_prog.py file_name.txt

, dann können Sie verwenden sys.argv ...

import sys
print sys.argv

sys.argv ist eine Liste, wobei 0 der Programmname ist, so in dem obigen Beispiel sys.argv [1] wäre "file_name.txt"

Wenn Sie auf Kommandozeilenoptionen voll haben, verwenden Sie das optparse Modul.

Pev

Wenn Sie Python ausführen <2.7, müssen Sie optparse , die als doc erklärt wird eine Schnittstelle zu den Befehlszeilenargumenten, die aufgerufen werden, wenn die Anwendung ausgeführt wird.

erstellen

Doch in Python ≥2.7, optparse veraltet ist, und wurde mit dem ersetzten argparse wie oben gezeigt. Ein kurzes Beispiel aus der Dokumentation ...

  

Der folgende Code ist ein Python-Programm, das eine Liste von ganzen Zahlen nimmt   und erzeugt entweder die Summe oder den max:

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)

Wie der Python 3.2 2.7, gibt es jetzt argparse für die Verarbeitung von Kommandozeilenargumenten.

Wenn es eine 3.x-Version ist dann einfach nur verwenden:

variantname = input()

Zum Beispiel wollen Sie zur Eingabe von 8:

x = input()
8

x wird gleich 8, aber es wird eine Zeichenfolge mit Ausnahme sein, wenn Sie es anders zu definieren.

So ermitteln Sie den Befehl convert verwenden können, wie:

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

In Python 2:

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

In Python 3:

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

if six.PY2:
    input = raw_input

print(input("What's your name? "))
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top