Sys argv trong Python

Về bản chất, Sys. argv() là danh sách tất cả các đầu vào dòng lệnh. Khi tập lệnh được thực thi, bạn có thể cung cấp đầu vào của người dùng theo nhiều cách khác nhau và một cách như vậy là thông qua dòng lệnh. Trong trường hợp đầu tiên này, giả sử rằng chúng ta có một tập lệnh đơn giản có tên là main. py

chính. py

in( “xin chào thế giới” )

Trong khi thực thi tập lệnh, chúng tôi sẽ thêm một vài đối số dòng lệnh ngoài tên tập lệnh. Nếu chúng tôi thực thi tập lệnh, chúng tôi sẽ nhận được như sau

$ python3 chính. py bạn đang làm gì vậy?
Chào thế giới

Sys argv trong Python

Bạn nhận thấy ở đây rằng các đối số dòng lệnh không can thiệp vào chính tập lệnh

Vì vậy, bây giờ, hãy sửa đổi kịch bản một chút. Vì vậy, giả sử rằng bây giờ chúng ta có một kịch bản tên là main. py với nội dung sau

chính. py
nhập sys

in(sys . argv)

Nếu chúng tôi thực thi tập lệnh, chúng tôi sẽ nhận được như sau

$ python3 chính. py
[ ‘chính. py’ ]

Sys argv trong Python

Như bạn có thể thấy, chúng tôi nhận được một danh sách có một mục trong đó vì chúng tôi chỉ cung cấp cho nó một mục, tên tập lệnh. Bây giờ, giả sử rằng chúng ta cung cấp cho nó một đối số đầu vào dòng lệnh hơi khác

chính. py
nhập sys

in(sys . argv)

Nếu chúng tôi thực thi tập lệnh, chúng tôi sẽ nhận được như sau

$ python3 chính. py xin chào thế giới
[ ‘chính. py,' 'xin chào', 'thế giới' ]

Sys argv trong Python

Bây giờ, điều xảy ra là nó truy xuất mọi thứ chúng tôi đã cung cấp qua dòng lệnh hoặc tất cả các đối số dòng lệnh do người dùng cung cấp. Trong trường hợp của tôi, tôi đã thêm 'hello world' sau tên của tập lệnh và như vậy, nó đã truy xuất tập lệnh đó vào danh sách

hệ thống. argv[0]

hệ thống. argv[0] là đối số đầu tiên trong danh sách. Trong mọi trường hợp, đối số đầu tiên luôn là tên của tập lệnh

chính. py
nhập sys

name_of_script = sys . argv[0]
in( tên_của_script )

Khi thực thi tập lệnh, chúng tôi sẽ gõ như sau

$ python3 chính. py
chủ yếu. py

Sys argv trong Python

hệ thống. argv[n]

Ngoài ra, bạn có thể muốn truy xuất một đối số dòng lệnh cụ thể. Ví dụ: bạn có thể muốn truy xuất đầu vào của người dùng thông qua các đối số dòng lệnh khi viết chương trình Python. Trong trường hợp này, chúng tôi sẽ truy xuất ba đối số dòng lệnh đầu tiên

chính. py
nhập sys

name1 = sys . argv[1]
name2 = sys . argv[2]
name3 = sys . argv[3]

in( “xin chào” ,  tên1,’,,name2,and,name3)

Khi thực thi tập lệnh, chúng ta sẽ gõ như sau chẳng hạn

$ python3 chính. py Trevor Travis Tim
xin chào Trevor, Travis và Tim

Sys argv trong Python

Đây, sys. argv[1] là đối số dòng lệnh thứ hai, trong khi sys. argv[2] là đối số dòng lệnh thứ ba và sys. argv[3] là đối số dòng lệnh thứ tư. Điều này là như vậy bởi vì mặc dù chỉ mục bắt đầu từ 0 và sys. argv[0] là tên của tập lệnh

Vậy điều gì sẽ xảy ra nếu người dùng phải nhập n số lượng đầu vào và chúng tôi không biết có bao nhiêu đầu vào?

chính. py
nhập sys

danh sách = sys . argv[1 . ]

cho giá trị trong danh sách .
    in( giá trị )

Khi thực thi tập lệnh, chúng ta sẽ gõ như sau chẳng hạn

$ python3 chính. py xin chào Trevor Travis và Tim
xin chào
Trevor
travis

Tim

Sys argv trong Python

Đây, sys. argv[1. ] có nghĩa là tất cả các giá trị từ sys. argv[1] được sử dụng cho đến hết danh sách. Trong trường hợp này, chúng ta có thể thêm bao nhiêu đối số dòng lệnh tùy thích

Dây

Xin lưu ý rằng tất cả các giá trị được ghi lại bởi biến sys. argv là các chuỗi. Vì vậy, giả sử rằng chúng tôi muốn thêm ba số mà người dùng nhập vào

chính2. py
nhập sys

num1 = sys . argv[1]
num2 = sys . argv[2]
num3 = sys . argv[3]

list = [ num1 , num2, num3]
tổng = tổng(danh sách)
in( tổng )

Nếu chúng tôi thực thi tập lệnh, chúng tôi sẽ nhận được như sau

$ python3 main2. py 3 4 5
TypeError. toán hạng không được hỗ trợ loại( s ) for +: ‘int’ and ‘str’

Sys argv trong Python

Những gì chúng tôi nhận được là TypeError. Điều này là do tất cả các giá trị thu được từ danh sách là các giá trị "chuỗi" trong khi chúng tôi yêu cầu các giá trị số nguyên để thêm vào. Để sửa lỗi này, chúng ta sẽ phải chuyển đổi các chuỗi thành số nguyên

chính2. py
nhập sys

num1 = int(sys.argv[1])
num2 = int(sys.argv[2])
num3 = int(sys.argv[3])

list = [ num1 , num2, num3]
tổng = tổng(danh sách)
in( tổng )

Nếu chúng tôi thực thi tập lệnh, chúng tôi sẽ nhận được như sau

$ python3 main2. py 3 4 5
12

Chúng tôi đã thêm int(sys. arg[n]) đảm bảo rằng chúng tôi đã chuyển đổi chuỗi thành số nguyên

Sys argv trong Python

hệ thống. lỗi argv

Một trong những lỗi phổ biến nhất được đưa ra (khi chúng tôi không sử dụng sys. argv[1. ] mà chỉ định giá trị thứ n bằng cách sử dụng sys. argv[n]) là của IndexError (liệt kê chỉ mục nằm ngoài phạm vi). Lỗi này có nghĩa là các đối số dòng lệnh không được chỉ định và để tránh lỗi này, chúng ta phải thực hiện một số bước phòng ngừa

chính. py
nhập sys

if len(sys . argv) < 4 hoặc . len(sys.argv) > 4 .
in( “vui lòng nhập ba tên” )

if len(sys . arv) == 4 .
name1 = sys . argv[1]
name2 = sys . argv[2]
name3 = sys . argv[3]

in( “xin chào” , tên1)
in( “xin chào” , tên2)
in( “xin chào” , tên3)

Khi thực thi tập lệnh, chúng ta sẽ gõ như sau chẳng hạn

$ python3 chính. py Travis Trevor Tim
xin chào Travis
xin chào Trevor
xin chào Tim

Sys argv trong Python

Để tránh lỗi, chúng ta phải điều chỉnh độ dài của các đối số dòng lệnh. Trong ví dụ trước, chúng ta có ba tên và một tên tập lệnh, có nghĩa là có tổng cộng 4 giá trị. Vì vậy, chúng tôi nói rằng nếu độ dài lớn hơn 4 hoặc nhỏ hơn 4, thì yêu cầu người dùng nhập ba tên;

Mô-đun sys rất quan trọng vì nó cho phép tương tác với trình thông dịch Python. Đặc biệt, biến sys. argv là một danh sách chứa tất cả các đối số dòng lệnh đã nhập của người dùng. hệ thống. argv[0] xác định tên của tập lệnh trong mọi trường hợp. mặc dù sys. argv() thường được sử dụng để thu thập các đối số dòng lệnh, một cách khác thậm chí còn tốt hơn để thu thập các đối số dòng lệnh là sử dụng argparse. Nhưng đó là một câu chuyện cho một ngày khác