Jak mam skrypt w języku Python, który: a) może akceptować dane wejściowe użytkownika i jak go zmusić, b) wczytywać argumenty, jeśli są uruchamiane z wiersza poleceń?
argparse
Zamiast optparse
.
Jak mam skrypt w języku Python, który: a) może akceptować dane wejściowe użytkownika i jak go zmusić, b) wczytywać argumenty, jeśli są uruchamiane z wiersza poleceń?
argparse
Zamiast optparse
.
Odpowiedzi:
Aby odczytać dane wprowadzone przez użytkownika można wypróbować ten cmd
moduł do łatwego tworzenia linii mini-interpreter poleceń (z tekstów pomocy i autouzupełniania) i raw_input
( input
dla Pythona 3+) do czytania wiersza tekstu od użytkownika.
text = raw_input("prompt") # Python 2
text = input("prompt") # Python 3
Wejścia wiersza poleceń są w sys.argv
. Wypróbuj to w swoim skrypcie:
import sys
print (sys.argv)
Istnieją dwa moduły do analizowania opcji wiersza poleceń: (przestarzałe od Python 2.7, optparse
argparse
zamiast tego używaj ) i getopt
. Jeśli chcesz tylko wprowadzić pliki do skryptu, zobacz moc fileinput
.
Referencyjna biblioteka Pythona jest twoim przyjacielem.
var = raw_input("Please enter something: ")
print "you entered", var
Lub dla Python 3:
var = input("Please enter something: ")
print("You entered: " + var)
raw_input
, jest to wbudowana funkcja.
raw_input
nie jest już dostępny w Pythonie 3.x. Ale raw_input
został przemianowany input
, więc istnieje ta sama funkcjonalność.
input_var = input("Enter something: ")
print ("you entered " + input_var)
import fileinput result=[] for line in fileinput.input(): result.append(line)
Najlepszym sposobem przetwarzania argumentów wiersza poleceń jest argparse
moduł.
Służy raw_input()
do uzyskiwania informacji od użytkownika. Jeśli zaimportujesz, readline module
użytkownicy będą mieli edytowanie linii i historię.
Ten prosty program pomaga zrozumieć, w jaki sposób karmić dane wejściowe użytkownika z wiersza poleceń i pokazać pomoc w przekazywaniu nieprawidłowych argumentów.
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) Aby znaleźć pierwiastek kwadratowy z 5
C:\Users\Desktop>python -i emp.py 5
25
['emp.py', '5']
5
2) Podanie nieprawidłowego argumentu innego niż liczba
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'>
Użyj „raw_input” do wprowadzania danych z konsoli / terminala.
jeśli chcesz tylko argumentu wiersza poleceń, takiego jak nazwa pliku lub coś np
$ python my_prog.py file_name.txt
możesz użyć sys.argv ...
import sys
print sys.argv
sys.argv jest listą, gdzie 0 jest nazwą programu, więc w powyższym przykładzie sys.argv [1] to „nazwa_pliku.txt”
Jeśli chcesz mieć pełne opcje wiersza poleceń, użyj modułu optparse.
Pev
Jeśli używasz Pythona <2.7, potrzebujesz optparse , który, jak wyjaśnia dokument, stworzy interfejs do argumentów wiersza poleceń, które są wywoływane podczas uruchamiania aplikacji.
Jednak w Pythonie ≥2.7 optparse zostało przestarzałe i zostało zastąpione przez argparse, jak pokazano powyżej. Szybki przykład z dokumentów ...
Poniższy kod jest programem w języku Python, który pobiera listę liczb całkowitych i generuje sumę lub maksimum:
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)
Od Pythona 3.22.7, jest teraz argparse do przetwarzania argumentów wiersza poleceń.
Jeśli jest to wersja 3.x, po prostu użyj:
variantname = input()
Na przykład, chcesz wprowadzić 8:
x = input()
8
x będzie równe 8, ale będzie to ciąg znaków, chyba że zdefiniujesz inaczej.
Możesz więc użyć polecenia konwersji, takiego jak:
a = int(x) * 1.1343
print(round(a, 2)) # '9.07'
9.07
import six
if six.PY2:
input = raw_input
print(input("What's your name? "))