PHP
Python

Trang chủ

Tham số dòng lệnh trong Python: Cách sử dụng và các kỹ thuật xử lý hiệu quả

Ngôn ngữ Python là một ngôn ngữ lập trình đa mục đích, nổi tiếng với cú pháp dễ đọc, dễ học và tính ứng dụng cao. Trong lĩnh vực phát triển web, Python thường được sử dụng thông qua các framework như Django và Flask để xây dựng các ứng dụng web mạnh mẽ, bảo mật và dễ mở rộng. Trong chuyên mục này, Vietnix không chỉ cung cấp kiến thức nền tảng về ngôn ngữ Python mà còn hướng dẫn chi tiết cách xây dựng các ứng dụng web thực tế, sử dụng các framework phổ biến và áp dụng các kỹ thuật tiên tiến. Vietnix cam kết liên tục cập nhật những bài viết mới nhất về các tính năng mới của Python, các thư viện hỗ trợ hữu ích và những phương pháp tốt nhất, giúp bạn khai thác tối đa sức mạnh của Python và hoàn thiện kỹ năng lập trình web của mình.
html
CSS
javascript
sql
python
php
c
c++
bootstrap
react
mysql
reactjs
vuejs
Javascript Tutorials
24/03/2025
19 phút đọc
Theo dõi Vietnix trên

Tham số dòng lệnh trong Python: Cách sử dụng và các kỹ thuật xử lý hiệu quả

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, getoptargparse. 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, getoptargparse 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.

image 133
Tham số dòng lệnh trong Python: Cách sử dụng và các kỹ thuật xử lý hiệu quả 18

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.

Truyền đối số khi chạy chương trình Python
Truyền đối số khi chạy chương trình Python

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?

Sử dụng sys.argv để đọc tham số dòng lệnh
Sử dụng sys.argv để đọc tham số dòng lệnh

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.argvgetopt, 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.argvgetoptargparse
Mức độ phức tạpĐơn giảnTrung bìnhLinh hoạt, mạnh mẽ
Xử lý tham số vị trí
Xử lý tham số tùy chọnKhông có hỗ trợ tự độngHỗ trợHỗ trợ
Xác định kiểu dữ liệuKhôngKhôngCó (với type)
Hỗ trợ giá trị mặc địnhKhôngKhôngCó (với default)
Hỗ trợ giá trị Boolean (flags)Không
Hiển thị help message tự độngKhôngKhông
Kiểm tra lỗi tự độngKhôngKhông
Hỗ trợ alias cho tham sốKhôngKhông
Thích hợp choCác script đơn giảnCác chương trình có tham số đơn giảnCác ứng dụng phức tạp
So sánh sys.argv, getopt, và argparse

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, VPSdomain. 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?

, 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?

, 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:

Cao Lê Viết Tiến

PHP Leader
tại
Vietnix

Kết nối với mình qua

Icon Quote
Icon Quote

Học lập trình online cùng vietnix

Học lập trình online cùng Vietnix

PHPXem thêmThu gọn