Hướng dẫn sys.stdin python - trăn sys.stdin
Vì vậy, bạn đã sử dụng "các hàm được tích hợp sẵn" của Python, có lẽ như thế này:
Thao tác này đọc tệp bằng cách gọi một trình lặp trên đối tượng tệp sẽ trả về dòng tiếp theo từ tệp. Thay vào đó, bạn có thể sử dụng:
mà đọc các dòng từ vị trí tệp hiện tại vào một danh sách. Bây giờ, 2chỉ là một đối tượng tệp khác, sẽ được Python mở trước khi chương trình của bạn bắt đầu. Những gì bạn làm với đối tượng tệp đó là tùy thuộc vào bạn, nhưng nó không thực sự khác biệt với bất kỳ đối tượng tệp nào khác, chỉ là bạn không cần một đối tượng tệp 3.
sẽ lặp lại thông qua đầu vào chuẩn cho đến khi đạt đến phần cuối của tệp. Và điều này cũng vậy:
Câu hỏi đầu tiên của bạn thực sự là về các cách khác nhau để sử dụng một đối tượng tệp. Thứ hai, nó được đọc từ đâu? Nó đang đọc từ bộ mô tả tệp 0 (không). Trên Windows, nó là tệp xử lý 0 (không). Bộ mô tả tệp / tay cầm 0 được kết nối với bảng điều khiển hoặc tty theo mặc định, do đó, trên thực tế, nó đang đọc từ bàn phím. Tuy nhiên, nó có thể được chuyển hướng , thường bằng một shell (như bash hoặc cmd.exe) bằng cách sử dụng cú pháp như sau:
Điều đó làm thay đổi bộ mô tả tệp bằng không để đọc tệp thay vì bàn phím. Trên UNIX hoặc Linux, điều này sử dụng lệnh gọi cơ bản 4. Đọc tài liệu trình bao của bạn để biết thêm thông tin về chuyển hướng (hoặc có thể 5nếu bạn dũng cảm).25 hữu ích 1 bình luận chia sẻ 1 bình luận chia sẻ Tôi muốn kiểm tra một số mã (python 3) sử dụng trực tiếp các hàm 6và 7. Theo tôi hiểu, cách dễ nhất để làm điều này là chèn phụ thuộc: sửa đổi mã để nó nhận các luồng đầu vào và đầu ra làm đối số, sử dụng 2và 9theo mặc định và chuyển vào các đối tượng giả trong quá trình thử nghiệm. Rõ ràng là phải làm gì với 6các cuộc gọi:
Tuy nhiên, 7không có đối số cho các luồng đầu vào và đầu ra. Đoạn mã sau có tái tạo chính xác hành vi của nó không?
Tôi đã xem xét việc triển khai 7, và nó thực hiện khá nhiều phép thuật, gọi 3và kiểm tra 4và 5hơn là gọi bất kỳ 6phương pháp nào - tôi không biết bắt đầu từ đâu với việc chế giễu chúng.
3 hữu ích 4 bình luận 4.0k xem chia sẻ 4 bình luận 4.0k xem chia sẻ answer 6 7chỉ phép thuật mà bạn đã đề cập khi 8và 9không bị thay đổi, bởi vì chỉ khi đó nó mới có thể sử dụng những thứ như thư viện dòng đọc. Nếu bạn thay thế chúng bằng một cái gì đó khác (tệp thực hoặc không), nó sẽ đi đến mã sau:
Nơi 0 gọi 1 phương thức. Như vậy việc chế nhạo 2sẽ có tác dụng.Bạn nên thực hiện việc này với 3bộ xử lý ngữ cảnh hoặc 4mô-đun để kết quả đầu ra được khôi phục ngay cả khi mã bạn đang kiểm tra không thành công với các ngoại lệ:
6 hữu ích 0 bình luận chia sẻ 0 bình luận chia sẻ answer 5 7chỉ phép thuật mà bạn đã đề cập khi 8và 9không bị thay đổi, bởi vì chỉ khi đó nó mới có thể sử dụng những thứ như thư viện dòng đọc. Nếu bạn thay thế chúng bằng một cái gì đó khác (tệp thực hoặc không), nó sẽ đi đến mã sau:
Nơi 0 gọi 1 phương thức. Như vậy việc chế nhạo 2sẽ có tác dụng. 0Bạn nên thực hiện việc này với 3bộ xử lý ngữ cảnh hoặc 4mô-đun để kết quả đầu ra được khôi phục ngay cả khi mã bạn đang kiểm tra không thành công với các ngoại lệ:6 hữu ích 0 bình luận chia sẻ 1Nếu bạn gán một đối tượng giống tệp cho hàm Hai dòng nàysẽ sử dụng các tệp được chỉ định (
lines = sys.stdin.readlines()
myprog.py < input_file.txt
|