Mô-đun doctest chỉ kiểm tra các câu lệnh có thể chạy từ dấu nhắc tương tác python.
công cụ dòng lệnh có thể được gọi từ dấu nhắc tương tác python sử dụng subprocess mô-đun:
# Create Helper Function
>>> import subprocess
>>> run_commandline = lambda cmd: subprocess.check_output(cmd, shell=True).decode()
# Doctestable command-line calls
>>> print(run_commandline('cal 7 2017'))
July 2017
Su Mo Tu We Th Fr Sa
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31
>>> print(run_commandline('echo $BASH_VERSION'))
3.2.57(1)-release
Có khả năng một số cách hack doctest hoặc nhân sư để có được những gì bạn muốn trực tiếp hơn, nhưng điều này sử dụng kỹ thuật API được quảng cáo cho doctest, sphinx và subprocess chính xác theo cách chúng được thiết kế để sử dụng (doctest được thiết kế để phát lại các dấu nhắc tương tác được tìm thấy trong docstrings, và subprocess được thiết kế để chạy các công cụ dòng lệnh trực tiếp từ python và capture output).
Tôi cho rằng tôi có thể sử dụng các mô-đun sh, hoặc popen để kiểm tra các tiêu chuẩn sản phẩm của một chương trình nào đó nhưng tôi thích rằng những thủ đoạn không hiển thị lên vào các tài liệu, nếu không không phải lập trình người dùng sẽ có chắc chắn bị mất.
Hai suy nghĩ: Thứ nhất, chi tiết của các cuộc gọi đó chủ yếu có thể bị ẩn trong chức năng trợ giúp để giảm thiểu sự mất tập trung. Thứ hai, nếu bạn cần gọi các chương trình dòng lệnh từ Python, nó không phải là một mẹo để sử dụng popen hoặc subprocess vì đó là những công cụ được thiết kế đặc biệt để thực hiện các cuộc gọi đó từ Python.
Nguồn
2017-07-09 23:45:09
Tại sao các downvotes? – jterrace
Bản sao có thể có của http://stackoverflow.com/questions/10886841/sphinx-and-argparse-autodocumenting-command-line-scripts –
Tôi không nghĩ rằng đây là bản sao. Câu hỏi khác chỉ là về tài liệu tự động. Đây là chủ đề chính về một chủ đề thú vị hơn nhiều, sử dụng doctest để kiểm tra các công cụ dòng lệnh. –