Điều gì sẽ xảy ra nếu chúng ta muốn chuyển thông tin đến chương trình Python của mình để thay đổi cách nó chạy?
Truyền đối số dòng lệnh
Khi bạn chạy một chương trình từ tệp , bạn có thể chuyển vào chương trình
Ở đây chúng tôi có một chương trình được gọi là
$ python3 greet.py Trey
Hello world
3Ở đây chúng tôi đang gọi chương trình này
$ python3 greet.py
Hello world
Đối số chức năng so với đối số dòng lệnh
Từ "đối số" là một thuật ngữ được tải
Trong Python, chúng ta có các đối số hàm là đầu vào của một hàm. Nhưng đối số dòng lệnh là đầu vào cho toàn bộ chương trình
Vì vậy, đối số hàm và đối số dòng lệnh không liên quan nhiều lắm, ngoại trừ việc cả hai đều là đầu vào của một thứ gì đó
Python chấp nhận bất kỳ đối số dòng lệnh nào mà chúng tôi cung cấp cho nó
Bạn nghĩ điều gì sẽ xảy ra nếu chúng ta chuyển một đối số cho chương trình
$ python3 greet.py Trey
Hello world
3 của mình khi chúng ta chạy nó thông qua Python?Chương trình
$ python3 greet.py Trey
Hello world
3 của chúng tôi hoàn toàn không sử dụng đối số dòng lệnh. Nó chỉ là một dòng mãVì vậy, dự đoán của bạn là gì?
Khi chúng tôi chạy chương trình
$ python3 greet.py Trey
Hello world
3 này với đối số $ python3 greet.py Trey
Hello world
9, chúng tôi thấy $ python3 greet.py Trey
Hello world
6 được in ra$ python3 greet.py Trey
Hello world
Đó là một chút kỳ lạ
Python chỉ bỏ qua bất kỳ đối số nào mà chúng tôi đã chuyển đến chương trình này. Python lưu trữ tất cả các đối số mà chúng ta đưa ra, nhưng nó không làm gì với các đối số. tùy thuộc vào chúng tôi [người thực hiện chương trình này] để làm điều gì đó với họ
Đối số dòng lệnh được lưu trữ ở đâu?
Python lưu trữ các đối số dòng lệnh trong mô-đun
import sys
print[sys.argv]
print["Hello world"]
1 trong danh sách có tênimport sys
print[sys.argv]
print["Hello world"]
Danh sách
import sys
print[sys.argv]
print["Hello world"]
3 có tất cả các đối số được truyền cho chương trình Python của chúng ta$ python3 greet.py Trey
['greet.py', 'Trey']
Hello world
Danh sách
import sys
print[sys.argv]
print["Hello world"]
3 của chúng tôi ở đây có hai thứ trong đó, tên chương trình của chúng tôi và đối số mà chúng tôi đã chuyển vào$ python3 greet.py Trey
['greet.py', 'Trey']
Điều đầu tiên trong
import sys
print[sys.argv]
print["Hello world"]
3 sẽ luôn là tên chương trình của chúng taNếu chúng tôi muốn lấy đối số sau tên chương trình của mình, chúng tôi có thể đọc mục thứ hai [chỉ mục
import sys
print[sys.argv]
print["Hello world"]
6] từ import sys
print[sys.argv]
print["Hello world"]
3import sys
print["Hello", sys.argv[1]]
Chúng tôi giả sử rằng chúng tôi nhận được một đối số được chuyển vào và chúng tôi đang in đối số đó ra
$ python3 greet.py Trey
Hello Trey
$ python3 greet.py Carol
Hello Carol
Nếu tôi chuyển nhiều hơn một đối số, chương trình của chúng tôi hiện đang bỏ qua mọi thứ sau đối số đầu tiên đó
$ python3 greet.py Trey Hunner
Hello Trey
Điều gì xảy ra nếu chúng ta vượt qua quá ít đối số?
$ python3 greet.py
Traceback [most recent call last]:
File "/home/trey/greet.py", line 3, in
print["Hello", sys.argv[1]]
IndexError: list index out of range
Nếu chúng ta chuyển qua hai đối số, chúng ta sẽ nhận được một
import sys
print[sys.argv]
print["Hello world"]
8 [vì import sys
print[sys.argv]
print["Hello world"]
3 không có chỉ số import sys
print[sys.argv]
print["Hello world"]
6 trong trường hợp này]Xử lý thủ công
import sys
print[sys.argv]
print["Hello world"]
3 là điều mà bạn chỉ nên làm đối với các chương trình Python rất đơn giản. các chương trình không cần xử lý đối số dòng lệnh phức tạp và lý tưởng nhất là chỉ làm điều này cho các chương trình chỉ dành cho bạn sử dụngPython cung cấp tất cả các đối số dòng lệnh dưới dạng chuỗi
Hãy xem một ví dụ khác. Ở đây chúng tôi có một chương trình tên là
$ python3 greet.py Trey
['greet.py', 'Trey']
Hello world
2import sys
program, x, y = sys.argv
print[x + y]
Chương trình này lấy
import sys
print[sys.argv]
print["Hello world"]
3 và giải nén nó thành ba biến. tên chương trình và bất kỳ hai đối số nào được đưa ra sau đóSau đó, nó cộng các đối số đó lại với nhau và in chúng ra
Chúng ta sẽ thấy gì khi chạy
$ python3 greet.py Trey
['greet.py', 'Trey']
Hello world
2 với $ python3 greet.py Trey
['greet.py', 'Trey']
Hello world
5 và $ python3 greet.py Trey
['greet.py', 'Trey']
Hello world
6?Hãy đoán
6?
5?
100?
Đây là những gì chúng tôi thấy khi chúng tôi chạy
$ python3 greet.py Trey
['greet.py', 'Trey']
Hello world
2 với $ python3 greet.py Trey
['greet.py', 'Trey']
Hello world
5 và $ python3 greet.py Trey
['greet.py', 'Trey']
Hello world
6Kỳ lạ, phải không?
Nếu chúng tôi
$ python3 greet.py Trey
['greet.py', 'Trey']
4 ra import sys
print[sys.argv]
print["Hello world"]
3$ python3 greet.py Trey
Hello world
0Chúng ta sẽ thấy rằng đó là một danh sách các chuỗi
$ python3 greet.py Trey
Hello world
1Python lưu trữ tất cả các đối số dòng lệnh dưới dạng chuỗi vì tất cả các đối số dòng lệnh được hệ điều hành cấp cho Python dưới dạng văn bản. Python không thực hiện bất kỳ xử lý nào với chúng;
Vì vậy, nếu chúng tôi muốn
$ python3 greet.py Trey
['greet.py', 'Trey']
Hello world
5 và $ python3 greet.py Trey
['greet.py', 'Trey']
Hello world
6 là số, chúng tôi sẽ phải tự chuyển đổi chúng thành số$ python3 greet.py Trey
Hello world
2Bây giờ cuối cùng chúng tôi cũng thấy kết quả mà chúng tôi mong đợi
Đối số dòng lệnh được lưu trữ trong danh sách import sys
print[sys.argv]
print["Hello world"]
3
import sys
print[sys.argv]
print["Hello world"]
Nếu bạn cần tạo một giao diện dòng lệnh rất đơn giản [giao diện chỉ dành cho bạn] và không cần phải thân thiện, bạn có thể đọc
import sys
print[sys.argv]
print["Hello world"]
3 để xử lý thủ công các đối số trong chương trình của mình. Nhưng nếu bạn cần thứ gì đó phức tạp hơn, có lẽ bạn nên sử dụng một công cụ xử lý đối số dòng lệnh thích hợp [như mô-đun import sys
print["Hello", sys.argv[1]]
0 của Python]. Điều gì sẽ xảy ra nếu chúng ta muốn chuyển thông tin đến chương trình Python của mình để thay đổi cách nó chạy?