8

Tôi có một mô-đun Python mà tôi đang viết một hướng dẫn sử dụng Sphinx bao gồm doctests.Có cách nào để sử dụng doctest và sphinx để kiểm tra và ghi lại các ứng dụng dòng lệnh không?

Mô-đun này đi kèm với một vài chương trình trợ giúp.

Tôi muốn bao gồm các chương trình trợ giúp đó trong tài liệu kiểm tra doctest rằng đầu ra chuẩn được đồng bộ giữa phiên bản chương trình hiện tại và tài liệu.

Tôi cho rằng tôi có thể sử dụng mô-đun sh hoặc bật để kiểm tra đầu ra tiêu chuẩn của một chương trình cụ thể nhưng tôi thích rằng các thủ thuật đó không hiển thị trong tài liệu hoặc người dùng không lập trình khác sẽ bị mất.

Có cách nào để đạt được điều đó không?

+1

Tại sao các downvotes? – jterrace

+0

Bản sao có thể có của http://stackoverflow.com/questions/10886841/sphinx-and-argparse-autodocumenting-command-line-scripts –

+0

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. –

Trả lời

1

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.

Các vấn đề liên quan