Tham số dòng lệnh là các giá trị được truyền vào chương trình Python thông qua terminal khi thực thi. Chúng giúp tùy chỉnh hành vi của chương trình mà không cần sửa đổi mã nguồn. Bài viết này sẽ hướng dẫn bạn cách làm việc với tham số dòng lệnh bằng sys.argv
, getopt
và argparse
. Bạn sẽ hiểu cách đọc, xử lý và so sánh các phương pháp này để lựa chọn giải pháp phù hợp nhất cho nhu cầu của mình.
Điểm chính cần nắm
- Định nghĩa command line arguments trong Python: Là các tham số được truyền vào chương trình Python thông qua terminal khi thực thi, giúp tùy chỉnh hành vi chương trình.
- Truyền đối số khi chạy chương trình Python: Cách truyền tham số vào script Python thông qua dòng lệnh bằng cách sử dụng terminal hoặc command prompt.
- Sử dụng sys.argv để đọc tham số dòng lệnh:
sys.argv
giúp đọc danh sách đối số truyền vào chương trình, hỗ trợ xử lý dữ liệu đầu vào từ dòng lệnh. - Sử dụng getopt để phân tích tham số dòng lệnh:
getopt
hỗ trợ phân tích tham số dạng ngắn và dài, giúp xử lý lệnh có tùy chọn linh hoạt hơn. - Sử dụng argparse để xử lý đối số nâng cao:
argparse
cung cấp công cụ mạnh mẽ để phân tích và xử lý tham số dòng lệnh, hỗ trợ kiểm tra kiểu dữ liệu và hiển thị trợ giúp tự động. - So sánh sys.argv, getopt, và argparse: Đánh giá ưu nhược điểm của từng phương pháp xử lý tham số dòng lệnh, giúp lựa chọn công cụ phù hợp với nhu cầu lập trình.
- Vietnix – Nhà cung cấp dịch vụ lưu trữ uy tín, tốc độ và bảo mật: Cung cấp server, VPS, hosting chất lượng cao với hiệu suất tối ưu và bảo mật mạnh mẽ.
- FAQ: Giải đáp các câu hỏi thường gặp về tham số dòng lệnh trong Python, giúp bạn hiểu rõ hơn về cách sử dụng hiệu quả.
Command line arguments trong Python là gì?
Tham số dòng lệnh (Command Line Arguments) trong Python là các giá trị được truyền vào chương trình khi chạy từ dòng lệnh, giúp điều chỉnh hành vi của chương trình mà không cần thay đổi mã nguồn. Python thu thập các tham số này thông qua sys.argv
, trong đó sys.argv[0]
là tên của script, còn các phần tử tiếp theo là các đối số được truyền vào. Các module như sys
, getopt
và argparse
hỗ trợ xử lý và phân tích cú pháp các tham số này một cách linh hoạt.

Truyền đối số khi chạy chương trình Python
Trong Python, bạn có thể truyền đối số trực tiếp khi chạy chương trình từ dòng lệnh. Các đối số này được thu thập thông qua sys.argv
, trong đó:
sys.argv[0]
là tên của script đang chạy.- Các phần tử tiếp theo trong danh sách là các đối số được truyền vào.
Ví dụ: Giả sử bạn có một script check_server.py
để kiểm tra trạng thái server của Vietnix. Bạn có thể chạy lệnh sau trong terminal:
python check_server.py server1 server2 server3
Trong check_server.py
, bạn có thể truy cập các đối số như sau:
import sys
print("Script:", sys.argv[0])
print("Danh sách server cần kiểm tra:", sys.argv[1:])
Kết quả:
Script: check_server.py
Danh sách server cần kiểm tra: [‘server1’, ‘server2’, ‘server3’]
Nếu không có server nào được truyền vào, script có thể hiển thị thông báo hướng dẫn:
import sys
if len(sys.argv) > 1:
print(“Danh sách server cần kiểm tra:”, sys.argv[1:])
else:
print(“Vui lòng nhập ít nhất một server để kiểm tra trạng thái.”)
Ngoài sys.argv
, bạn cũng có thể sử dụng các module như getopt
hoặc argparse
để xử lý đối số một cách linh hoạt hơn.
Ví dụ:
name = input("Enter your name: ")
print ("Hello {}. How are you?".format(name))
Kết quả: Chương trình được chạy từ terminal dòng lệnh như sau.

Sử dụng sys.argv để đọc tham số dòng lệnh
Trong Python, sys.argv
giúp đọc các tham số dòng lệnh được truyền vào khi chạy chương trình. Các tham số này có thể là thông tin cần thiết để chương trình xử lý, chẳng hạn như tên file, số liệu hoặc các tham số cấu hình.
Cách hoạt động của sys.argv
sys.argv
là một list chứa các đối số dòng lệnh:
sys.argv[0]
: Tên của script đang chạy.sys.argv[1:]
: Các đối số được truyền vào khi chạy chương trình.
Ví dụ: Vietnix có một script greeting.py
để hiển thị lời chào đến người dùng. Khi chạy script này từ dòng lệnh, ta có thể truyền vào tên người dùng như bên dưới.
python greeting.py Vietnix
Nội dung greeting.py
:
import sys
if len(sys.argv) > 1:
name = sys.argv[1]
print(f"Xin chào {name}, chào mừng bạn đến với Vietnix!")
else:
print("Vui lòng nhập tên khi chạy chương trình.")
Kết quả:
Xin chào Vietnix, chào mừng bạn đến với Vietnix!
Nếu không truyền tên:
Vui lòng nhập tên khi chạy chương trình.
Bên cạnh đó, giả sử trước đây hello.py
nhận đầu vào từ người dùng bằng input()
, ta có thể thay đổi nó để sử dụng sys.argv
:
Trước đây (hello.py
dùng input()
):
name = input("Enter your name: ")
print(f"Hello {name}. How are you?")
Sau khi chỉnh sửa (hello.py
dùng sys.argv
):
import sys
print("Arguments:", sys.argv)
if len(sys.argv) > 1:
name = sys.argv[1]
print(f"Hello {name}. How are you?")
else:
print("Please enter your name as a command-line argument.")
Chạy chương trình từ dòng lệnh:
python hello.py Bo Vietnix
Kết quả:
Arguments: [‘hello.py’, ‘Bo’, ‘Vietnix’]
Hello Bo. How are you?

Chuyển đổi kiểu dữ liệu từ sys.argv
Mặc định, các tham số dòng lệnh được lưu dưới dạng chuỗi. Nếu cần thực hiện phép toán, ta phải chuyển đổi kiểu dữ liệu.
Ví dụ: Script sum.py
tính tổng hai số được truyền từ dòng lệnh:
import sys
if len(sys.argv) >= 3:
num1 = int(sys.argv[1])
num2 = int(sys.argv[2])
print(f"Tổng của {num1} và {num2} là {num1 + num2}")
else:
print("Vui lòng nhập hai số khi chạy chương trình.")
Chạy chương trình:
python sum.py 15 25
Kết quả:
Tổng của 15 và 25 là 40
Các module hỗ trợ xử lý tham số dòng lệnh
Ngoài sys.argv
, Python còn có các module khác để xử lý tham số linh hoạt hơn:
getopt: Hỗ trợ phân tích cú pháp tham số theo phong cách C.
argparse: Hỗ trợ xử lý tham số, giá trị mặc định và tự động tạo trợ giúp.
Sử dụng getopt
để phân tích tham số dòng lệnh
Bên cạnh sys.argv
, Python cung cấp module getopt
để giúp xử lý tham số dòng lệnh một cách linh hoạt hơn. getopt
hỗ trợ các tùy chọn ngắn (-h
) và dài (--help
), cho phép người dùng dễ dàng truyền đối số vào chương trình.
Cú pháp của getotp
import getopt
import sys
opts, args = getopt.getopt(sys.argv[1:], "ho:v", ["help", "output="])
# Trong đó:
# sys.argv[1:]: Lấy danh sách tham số dòng lệnh trừ tên script.
# "ho:v": Định nghĩa các tùy chọn ngắn (-h, -o, -v).
# ["help", "output="]: Định nghĩa các tùy chọn dài (--help, --output=).
Khi nào nên dùng getopt?
- Khi cần hỗ trợ cả tùy chọn ngắn (
-o
) và dài (--output
). - Khi cần xử lý lỗi cú pháp một cách rõ ràng.
- Khi muốn tạo hướng dẫn (
--help
) để người dùng dễ sử dụng chương trình hơn.
Ví dụ: Xử lý tham số dòng lệnh với getopt
# Giả sử Vietnix có một script example.py nhận các tham số để in thông tin ra màn hình.
import sys
import getopt
def main(argv):
output_file = ""
try:
opts, args = getopt.getopt(argv, "ho:v", ["help", "output="])
except getopt.GetoptError:
print("Usage: example.py -o <outputfile> or example.py --output=<outputfile>")
sys.exit(2)
for opt, arg in opts:
if opt in ("-h", "--help"):
print("Usage: example.py -o <outputfile> or example.py --output=<outputfile>")
sys.exit()
elif opt in ("-o", "--output"):
output_file = arg
print(f"Output file: {output_file}")
if __name__ == "__main__":
main(sys.argv[1:])
Chạy chương trình với các tham số khác nhau
1. Truyền tham số bằng tùy chọn ngắn (-o)
python example.py -o output.txt
Kết quả:
Output file: output.txt
2. Truyền tham số bằng tùy chọn dài (--output=
)
python example.py --output=output.txt
Kết quả:
Output file: output.txt
3. Hiển thị hướng dẫn (-h hoặc –help)
python example.py -h
Kết quả:
Usage: example.py -o <outputfile> or example.py –output=<outputfile>
Phương thức getopt.getopt()
Hàm này phân tích cú pháp các tùy chọn dòng lệnh và danh sách tham số. Cú pháp đơn giản cho hàm này là:
opts, args = getopt.getopt(args, options, long_options)
Trong đó:
args
: Danh sách tham số cần phân tích cú pháp.options
: Chuỗi chứa các ký tự tùy chọn ngắn. Các tùy chọn có tham số đi kèm phải có dấu:
phía sau.long_options
: Danh sách các tùy chọn dài. Nếu tùy chọn dài yêu cầu tham số, phải có dấu=
phía sau.
Xử lý ngoại lệ getopt.GetoptError
Lỗi này xảy ra khi:
- Một tùy chọn yêu cầu giá trị nhưng không được cung cấp.
- Một tùy chọn không được nhận dạng.
Ví dụ:
Giả sử chúng ta muốn truyền hai tên tệp qua dòng lệnh và chúng ta cũng muốn cung cấp tùy chọn để kiểm tra cách sử dụng tập lệnh. Cách sử dụng tập lệnh như sau:
usage: test.py -i <inputfile> -o <outputfile>
Sau đây là đoạn mã lệnh test.py:
import sys, getopt
def main(argv):
inputfile = ""
outputfile = ""
try:
opts, args = getopt.getopt(argv, "hi:o:", ["ifile=", "ofile="])
except getopt.GetoptError:
print("Usage: test.py -i <inputfile> -o <outputfile>")
sys.exit(2)
for opt, arg in opts:
if opt == "-h":
print("Usage: test.py -i <inputfile> -o <outputfile>")
sys.exit()
elif opt in ("-i", "--ifile"):
inputfile = arg
elif opt in ("-o", "--ofile"):
outputfile = arg
print("Input file is", inputfile)
print("Output file is", outputfile)
if __name__ == "__main__":
main(sys.argv[1:])
Chạy chương trình:
python test.py -i input.txt -o output.txt
Kết quả:
Input file is input.txt
Output file is output.txt
Module getopt
giúp việc xử lý tham số dòng lệnh trong Python trở nên dễ dàng và linh hoạt hơn. Nếu cần hỗ trợ tùy chọn nâng cao, bạn có thể sử dụng argparse
để thay thế.
Sử dụng argparse
để xử lý đối số nâng cao
Bên cạnh sys.argv
và getopt
, Python cung cấp module argparse
để xử lý đối số dòng lệnh một cách linh hoạt hơn. argparse
không chỉ hỗ trợ tùy chọn ngắn (-o) và dài (–output) mà còn giúp tự động tạo hướng dẫn sử dụng, xử lý giá trị mặc định và kiểm tra lỗi.
Khi nào nên dùng argparse?
- Khi cần xử lý nhiều đối số với kiểu dữ liệu khác nhau.
- Khi muốn cung cấp giá trị mặc định cho các tham số.
- Khi cần hiển thị hướng dẫn sử dụng mà không phải tự viết thủ công.
- Khi muốn kiểm tra lỗi nhập tham số một cách tự động.
Cú pháp cơ bản của argparse
import argparse
parser = argparse.ArgumentParser(description="Script xử lý tham số dòng lệnh.")
parser.add_argument("-n", "--name", help="Tên của bạn")
args = parser.parse_args()
if args.name:
print(f"Xin chào {args.name}, chào mừng bạn đến với Vietnix!")
else:
print("Vui lòng nhập tên bằng tùy chọn -n hoặc --name.")
Chạy chương trình:
python script.py --name Vietnix
Kết quả:
Xin chào Vietnix, chào mừng bạn đến với Vietnix!
Xử lý kiểu dữ liệu với argparse
argparse
hỗ trợ tự động chuyển đổi kiểu dữ liệu bằng tham số type
. Ví dụ, nếu cần nhập số nguyên, ta có thể chỉ định type=int
:
parser.add_argument("-a", "--age", type=int, help="Tuổi của bạn")
Ví dụ: Tính tổng hai số nhập từ dòng lệnh
import argparse
parser = argparse.ArgumentParser(description="Tính tổng hai số.")
parser.add_argument("num1", type=int, help="Số thứ nhất")
parser.add_argument("num2", type=int, help="Số thứ hai")
args = parser.parse_args()
print(f"Tổng của {args.num1} và {args.num2} là {args.num1 + args.num2}")
Chạy chương trình:
python sum.py 10 20
Kết quả:
Tổng của 10 và 20 là 30
Sử dụng giá trị mặc định
Nếu tham số không được truyền vào, argparse
có thể đặt giá trị mặc định bằng default
:
parser.add_argument("-c", "--city", default="Hà Nội", help="Thành phố của bạn")
Ví dụ:
import argparse
parser = argparse.ArgumentParser(description="Thông tin người dùng.")
parser.add_argument("-n", "--name", required=True, help="Tên của bạn")
parser.add_argument("-c", "--city", default="Sài Gòn", help="Thành phố của bạn")
args = parser.parse_args()
print(f"{args.name} đến từ {args.city}.")
Chạy chương trình
python user_info.py -n Vietnix
Kết quả:
Vietnix đến từ Sài Gòn.
Hiển thị trợ giúp tự động
argparse
tự động tạo trợ giúp khi chạy lệnh -h
hoặc --help
:
python script.py --help
Kết quả:
usage: script.py [-h] [-n NAME]
Script xử lý tham số dòng lệnh.
options:
-h, –help Hiển thị hướng dẫn.
-n NAME, –name NAME Tên của bạn.
So sánh sys.argv
, getopt
, và argparse
Dưới đây là bảng so sánh giữa sys.argv
, getopt
, và argparse
về cách xử lý tham số dòng lệnh trong Python:
Tiêu chí | sys.argv | getopt | argparse |
---|---|---|---|
Mức độ phức tạp | Đơn giản | Trung bình | Linh hoạt, mạnh mẽ |
Xử lý tham số vị trí | Có | Có | Có |
Xử lý tham số tùy chọn | Không có hỗ trợ tự động | Hỗ trợ | Hỗ trợ |
Xác định kiểu dữ liệu | Không | Không | Có (với type ) |
Hỗ trợ giá trị mặc định | Không | Không | Có (với default ) |
Hỗ trợ giá trị Boolean (flags) | Không | Có | Có |
Hiển thị help message tự động | Không | Không | Có |
Kiểm tra lỗi tự động | Không | Không | Có |
Hỗ trợ alias cho tham số | Không | Không | Có |
Thích hợp cho | Các script đơn giản | Các chương trình có tham số đơn giản | Các ứng dụng phức tạp |
Vietnix – Nhà cung cấp dịch vụ lưu trữ uy tín, tốc độ và bảo mật
Vietnix là một trong những đơn vị hàng đầu tại Việt Nam trong lĩnh vực cung cấp dịch vụ thuê server, hosting, VPS và domain. Với cam kết mang đến giải pháp lưu trữ hiệu quả và an toàn, Vietnix cung cấp dịch vụ chất lượng cao, cùng đội ngũ kỹ thuật chuyên nghiệp hỗ trợ 24/7. Hơn 80.000 khách hàng đã tin tưởng lựa chọn Vietnix nhờ hệ thống máy chủ ổn định, bảo mật cao, giúp tối ưu hiệu suất vận hành cho doanh nghiệp.
Thông tin liên hệ:
- Hotline: 18001093
- Email: sales@vietnix.com.vn
- Địa chỉ: 265 Hồng Lạc, Phường 10, Quận Tân Bình, Thành Phố Hồ Chí Minh.
- Website: https://vietnix.vn/
Câu hỏi thường gặp
Tham số dòng lệnh trong Python có ưu điểm gì so với nhập dữ liệu từ input()?
Sử dụng tham số dòng lệnh giúp chương trình linh hoạt hơn vì không yêu cầu người dùng nhập dữ liệu thủ công khi chạy. Điều này đặc biệt hữu ích trong tự động hóa, khi cần chạy script nhiều lần với các giá trị khác nhau mà không cần thao tác thủ công.
sys.argv có thể chứa dữ liệu kiểu nào?
Mặc định, tất cả giá trị trong sys.argv
đều là chuỗi (str
). Nếu cần sử dụng các kiểu dữ liệu khác như số nguyên hoặc số thực, bạn phải chuyển đổi thủ công bằng cách dùng int()
hoặc float()
.
Có thể dùng tham số dòng lệnh trong Python để nhập mật khẩu không?
Không nên, vì tham số dòng lệnh có thể bị lưu lại trong lịch sử terminal hoặc hiển thị công khai trên màn hình. Thay vào đó, nên dùng getpass.getpass()
để nhập mật khẩu một cách bảo mật.
argparse có hỗ trợ đọc file đầu vào từ tham số dòng lệnh không?
Có, chỉ cần truyền tên file làm tham số và dùng argparse.FileType()
để mở file một cách an toàn. Điều này giúp kiểm tra file tồn tại trước khi đọc, tránh lỗi mở file không hợp lệ.
Có thể dùng argparse để bắt buộc nhập một tham số không?
Có, bằng cách thêm required=True
vào add_argument()
. Khi thiếu tham số bắt buộc, argparse
sẽ tự động hiển thị thông báo lỗi và dừng chương trình.
Có thể truyền danh sách nhiều giá trị vào một tham số không?
Có, sử dụng nargs='+'
hoặc nargs='*'
trong argparse
để nhận danh sách giá trị từ dòng lệnh.
argparse có hỗ trợ kiểu dữ liệu complex (số phức) không?
Không có hỗ trợ trực tiếp, nhưng có thể sử dụng type=complex
để tự động chuyển đổi chuỗi thành số phức.
Lời kết
Làm việc với tham số dòng lệnh giúp chương trình linh hoạt hơn, đặc biệt khi xây dựng script tự động hóa hoặc công cụ dòng lệnh. Tùy vào yêu cầu, bạn có thể sử dụng sys.argv
cho các tác vụ đơn giản, getopt
cho xử lý tham số có dấu gạch ngang, hoặc argparse
để xây dựng CLI chuên nghiệp. Nếu bạn có bất cứ thắc mắc hay cần hỗ trợ gì, hãy để lại bình luận bên dưới, mình sẽ hỗ trợ nhanh nhất. Cảm ơn bạn đã đọc!
Mọi người cũng xem: