it-swarm-eu.dev

Argumenty uživatelského vstupu a příkazového řádku

Jak mohu mít skript Python, který a) může přijímat vstupy uživatelů a jak to udělám b) číst v argumentech, pokud běží z příkazového řádku?

465
Teifion

Pro čtení uživatelského vstupu můžete zkusit modul cmd pro snadné vytvoření interpreteru mini-příkazového řádku (s nápovědou a autocompletion) a raw_input ( input pro Python 3+) pro čtení řádku textu od uživatele.

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

Vstupy příkazového řádku jsou v sys.argv. Zkuste to ve svém skriptu:

import sys
print (sys.argv)

Existují dva moduly pro analýzu voleb příkazového řádku:  optparse (zastaralé od Pythonu 2.7, použijte argparse namísto) a getopt . Chcete-li do svého skriptu pouze vkládat soubory, podívejte se na moc fileinput .

Odkaz na knihovnu Python je váš přítel.

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

Nebo pro Python 3:

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

raw_input již není k dispozici v Pythonu 3.x. raw_input byl ale přejmenován na input, takže existuje stejná funkce.

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

Dokumentace změny

201
steampowered

Nejlepším způsobem zpracování argumentů příkazového řádku je modul argparse.

Pomocí raw_input() získáte vstup uživatele. Pokud importujete readline module vaši uživatelé budou mít editaci linky a historii.

31
Dave Webb

Pozor, nepoužívejte funkci input, pokud nevíte, co děláte. Na rozdíl od raw_input, input bude akceptovat jakýkoli python výraz, takže je to jako eval

18
Vhaerun

Tento jednoduchý program vám pomůže porozumět tomu, jak vkládat vstup uživatele z příkazového řádku a ukázat nápovědu při předávání neplatného argumentu.

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) Najít druhou odmocninu 5

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

2) Předání neplatného argumentu jiného než číslo

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

Použijte 'raw_input' pro vstup z konzoly/terminálu.

pokud chcete pouze argument příkazového řádku jako název souboru nebo něco, např.

$ python my_prog.py file_name.txt

pak můžete použít sys.argv ...

import sys
print sys.argv

sys.argv je seznam, kde 0 je název programu, takže ve výše uvedeném příkladu by sys.argv [1] byl "file_name.txt"

Pokud chcete mít plné možnosti příkazového řádku, použijte modul optparse.

Pev

10
Simon Peverett

Pokud používáte Python <2.7, budete potřebovat optparse , což v dokumentu vysvětlí, že vytvoří rozhraní pro argumenty příkazového řádku, které se nazývají při spuštění aplikace.

V Pythonu ≥2,7 však byla optparse zastaralá a byla nahrazena argparse jak je uvedeno výše. Rychlý příklad z dokumentů ...

Následující kód je program Python, který vezme seznam celých čísel a vytvoří buď součet nebo maximální hodnotu:

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

Pokud je to verze 3.x, pak stačí použít:

variantname = input()

Chcete například zadat 8:

x = input()
8

x bude rovno 8, ale bude to řetězec s výjimkou, pokud jej definujete jinak.

Můžete tedy použít příkaz convert, například:

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

Jako Python 3.2 2.7 je nyní argparse pro zpracování argumentů příkazového řádku.

6
GreenMatt

V Pythonu 2:

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

V Pythonu 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