Làm cách nào để tôi có một tập lệnh Python mà a) có thể chấp nhận đầu vào của người dùng và làm cách nào để làm cho nó b) đọc trong các đối số nếu chạy từ dòng lệnh?
argparse
thay vì optparse
.
Làm cách nào để tôi có một tập lệnh Python mà a) có thể chấp nhận đầu vào của người dùng và làm cách nào để làm cho nó b) đọc trong các đối số nếu chạy từ dòng lệnh?
argparse
thay vì optparse
.
Câu trả lời:
Để đọc đầu vào người dùng mà bạn có thể thử các cmd
mô-đun để dễ dàng tạo ra một dòng thông dịch viên mini-lệnh (với văn bản trợ giúp và autocompletion) và raw_input
( input
cho Python 3+) để đọc một dòng văn bản từ người dùng.
text = raw_input("prompt") # Python 2
text = input("prompt") # Python 3
Đầu vào dòng lệnh được trong sys.argv
. Hãy thử điều này trong kịch bản của bạn:
import sys
print (sys.argv)
Có hai mô-đun để phân tích các tùy chọn dòng lệnh: (không dùng nữa từ Python 2.7, sử dụng optparse
argparse
thay thế) và getopt
. Nếu bạn chỉ muốn nhập tập tin vào tập lệnh của mình, hãy xem sức mạnh của fileinput
.
Các Python thư viện tham khảo là bạn của bạn.
var = raw_input("Please enter something: ")
print "you entered", var
Hoặc cho Python 3:
var = input("Please enter something: ")
print("You entered: " + var)
raw_input
, đó là một hàm dựng sẵn.
raw_input
không còn có sẵn trong Python 3.x. Nhưng raw_input
đã được đổi tên input
, vì vậy các chức năng tương tự tồn tại.
input_var = input("Enter something: ")
print ("you entered " + input_var)
import fileinput result=[] for line in fileinput.input(): result.append(line)
Cách tốt nhất để xử lý các đối số dòng lệnh là argparse
mô-đun.
Sử dụng raw_input()
để có được đầu vào của người dùng. Nếu bạn nhập, readline module
người dùng của bạn sẽ có lịch sử và chỉnh sửa dòng.
Chương trình đơn giản này giúp bạn hiểu cách cung cấp đầu vào của người dùng từ dòng lệnh và để hiển thị trợ giúp về việc truyền đối số không hợp lệ.
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) Để tìm căn bậc hai của 5
C:\Users\Desktop>python -i emp.py 5
25
['emp.py', '5']
5
2) Truyền đối số không hợp lệ ngoài số
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'>
Sử dụng 'raw_input' cho đầu vào từ bàn điều khiển / thiết bị đầu cuối.
nếu bạn chỉ muốn một đối số dòng lệnh như tên tệp hoặc một cái gì đó, vd
$ python my_prog.py file_name.txt
sau đó bạn có thể sử dụng sys.argv ...
import sys
print sys.argv
sys.argv là một danh sách trong đó 0 là tên chương trình, vì vậy trong ví dụ trên sys.argv [1] sẽ là "file_name.txt"
Nếu bạn muốn có đầy đủ các tùy chọn dòng lệnh, hãy sử dụng mô-đun optparse.
Pev
Nếu bạn đang chạy Python <2.7, bạn cần optparse , như tài liệu giải thích sẽ tạo giao diện cho các đối số dòng lệnh được gọi khi ứng dụng của bạn chạy.
Tuy nhiên, trong Python ≥2.7, optparse đã không được dùng nữa và được thay thế bằng argparse như được hiển thị ở trên. Một ví dụ nhanh từ các tài liệu ...
Đoạn mã sau là chương trình Python lấy danh sách các số nguyên và tạo tổng hoặc cực đại:
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)
Kể từ Python 3.22.7, hiện đã có argparse để xử lý các đối số dòng lệnh.
import six
if six.PY2:
input = raw_input
print(input("What's your name? "))