Tôi đang viết một ứng dụng Python mà mất như một lệnh làm tham số, ví dụ:động mô-đun nhập khẩu bằng Python
$ python myapp.py command1
tôi muốn ứng dụng được mở rộng, có nghĩa là, để có thể thêm các mô đun mới triển khai các lệnh mới mà không phải thay đổi nguồn ứng dụng chính. Cây trông giống như sau:
myapp/
__init__.py
commands/
__init__.py
command1.py
command2.py
foo.py
bar.py
Vì vậy, tôi muốn ứng dụng tìm các mô-đun lệnh sẵn có khi chạy và thực hiện mô-đun thích hợp.
Hiện nay điều này được thực hiện một cái gì đó như:
command = sys.argv[1]
try:
command_module = __import__("myapp.commands.%s" % command, fromlist=["myapp.commands"])
except ImportError:
# Display error message
command_module.run()
này hoạt động tốt, tôi chỉ tự hỏi nếu có thể là một cách thành ngữ hơn để thực hiện những gì chúng tôi đang làm với mã này.
Lưu ý rằng tôi đặc biệt không muốn sử dụng trứng hoặc điểm mở rộng. Đây không phải là một dự án mã nguồn mở và tôi không mong đợi có được "bổ sung". Vấn đề là đơn giản hóa mã ứng dụng chính và loại bỏ nhu cầu sửa đổi nó mỗi lần thêm một mô-đun lệnh mới.
Gì fromlist = [ "myapp.commands"] làm gì? –
@ PieterMüller: trong một loại trình bao python: '' dir (__ import __) ''. Danh sách từ phải là danh sách các tên để mô phỏng "từ nhập tên ...". – mawimawi
[Nhập mô-đun từ biến chuỗi] (http://stackoverflow.com/questions/8718885/import-module-from-string-variable) –