1) Tôi khuyên bạn nên tránh các biến số môi trường càng nhiều càng tốt.
Ưu điểm của các biến môi trường
- dễ sử dụng vì chúng có thể nhìn thấy từ mọi nơi. Nếu nhiều chương trình độc lập cần một thông tin, thì cách tiếp cận này thuận tiện hơn rất nhiều.
Nhược điểm của các biến môi trường
- khó sử dụng chính xác vì chúng có thể nhìn thấy (có thể xóa, có thể thiết lập) từ mọi nơi. Nếu tôi cài đặt một chương trình mới dựa trên các biến môi trường, liệu chúng có sử dụng các biến hiện có của tôi không? Có phải tôi đã vô tình làm hỏng các biến số môi trường của mình khi tôi đang hoành tráng ngày hôm qua không?
Ý kiến cá nhân của tôi
- sử dụng các đối số dòng lệnh cho những đối số có nhiều khả năng khác nhau đối với từng lệnh gọi riêng lẻ của chương trình (tức là n cho một chương trình tính toán n!)
- sử dụng tệp cấu hình cho các đối số mà người dùng có thể muốn thay đổi một cách hợp lý, nhưng không thường xuyên (tức là kích thước hiển thị khi cửa sổ bật lên)
- sử dụng các biến môi trường một cách tiết kiệm - chỉ ưu tiên cho các đối số được cho là không thay đổi (tức là vị trí của trình thông dịch Python)
- quan điểm của bạn
They are global and accessible from anywhere, which is less elegant from architectural point of view, but limits the amount of code
nhắc tôi về những biện minh cho việc sử dụng các biến toàn cục;)
Những vết sẹo của tôi do tận mắt trải qua sự khủng khiếp của việc lạm dụng quá mức các biến đổi môi trường
- hai chương trình chúng ta cần tại nơi làm việc không thể chạy cùng lúc trên cùng một máy tính do xung đột môi trường
- nhiều phiên bản của các chương trình có cùng tên nhưng lỗi khác nhau - đã khiến cả một hội thảo phải điêu đứng trong nhiều giờ vì vị trí của chương trình bị lấy ra khỏi môi trường và (một cách âm thầm, tinh vi) đã sai.
2) Giới hạn
Nếu tôi đang đẩy giới hạn của những gì dòng lệnh có thể giữ hoặc những gì môi trường có thể xử lý, tôi sẽ cấu trúc lại ngay lập tức.
Trước đây tôi đã sử dụng JSON cho một ứng dụng dòng lệnh cần rất nhiều tham số. Rất tiện lợi khi có thể sử dụng từ điển và danh sách, cùng với chuỗi và số. Ứng dụng chỉ lấy một vài args dòng lệnh, một trong số đó là vị trí của tệp JSON.
Ưu điểm của phương pháp này
- không cần phải viết nhiều mã (khó khăn) để tương tác với thư viện CLI - có thể là một điều khó khăn khi khiến nhiều thư viện phổ biến thực thi các ràng buộc phức tạp (bởi 'phức tạp', ý tôi là phức tạp hơn việc kiểm tra một khóa cụ thể hoặc sự thay thế giữa một bộ khóa)
- không phải lo lắng về các yêu cầu của thư viện CLI đối với thứ tự của các đối số - chỉ cần sử dụng một đối tượng JSON!
- dễ biểu diễn dữ liệu phức tạp (trả lời
What won't fit into command line parameters?
) như danh sách
- dễ dàng sử dụng dữ liệu từ các ứng dụng khác - cả để tạo và phân tích cú pháp theo chương trình
- dễ dàng điều chỉnh các tiện ích mở rộng trong tương lai
Lưu ý : Tôi muốn phân biệt điều này với phương pháp .config-file - phương pháp này không phải để lưu trữ cấu hình người dùng. Có lẽ tôi nên gọi đây là cách tiếp cận 'tệp tham số dòng lệnh', vì tôi sử dụng nó cho một chương trình cần nhiều giá trị không phù hợp với dòng lệnh.
3) Tính di động của giải pháp: Tôi không biết nhiều về sự khác biệt giữa Mac, PC và Linux liên quan đến các biến môi trường và đối số dòng lệnh, nhưng tôi có thể cho bạn biết:
- cả ba đều hỗ trợ cho các biến môi trường
- tất cả chúng đều hỗ trợ các đối số dòng lệnh
Vâng, tôi biết - nó không hữu ích lắm. Tôi xin lỗi. Nhưng điểm mấu chốt là bạn có thể mong đợi một giải pháp hợp lý có tính di động, mặc dù bạn chắc chắn muốn xác minh điều này cho các chương trình của mình (ví dụ: args dòng lệnh có phân biệt chữ hoa chữ thường trên bất kỳ nền tảng nào trên tất cả các nền tảng không? Tôi không biết ).
Một điểm cuối cùng:
Như Tomasz đã đề cập, nó không quan trọng đối với hầu hết các ứng dụng mà các tham số đến từ đâu.