Làm thế nào để bạn xác định thiết bị xuất chuẩn trong python?

Người dùng UNIX đã quen thuộc với khái niệm đầu vào tiêu chuẩn, đầu ra tiêu chuẩn và lỗi tiêu chuẩn. Phần này dành cho phần còn lại của bạn

Ví dụ 10. 8. Giới thiệu stdout và stderr

>>> for i in range[3]:
..     print 'Dive in'             
Dive in
Dive in
Dive in
>>> import sys
>>> for i in range[3]:
..     sys.stdout.write['Dive in'] 
Dive inDive inDive in
>>> for i in range[3]:
..     sys.stderr.write['Dive in'] 
Dive inDive inDive in

thiết bị xuất chuẩn là một đối tượng giống như tệp; . Trên thực tế, đây là những gì chức năng in thực sự làm; . tiêu chuẩn. viết

thiết bị xuất chuẩn và thiết bị xuất chuẩn đều là các đối tượng giống như tệp, giống như các đối tượng bạn đã thảo luận trong phần trước, nhưng cả hai đều chỉ ghi. Họ không có phương pháp đọc, chỉ viết. Tuy nhiên, chúng là các đối tượng giống như tệp và bạn có thể gán bất kỳ đối tượng giống tệp hoặc tệp nào khác cho chúng để chuyển hướng đầu ra của chúng

Ví dụ 10. 9. chuyển hướng đầu ra

[you@localhost kgp]$ python stdout.py
Dive in
[you@localhost kgp]$ cat out.log
This message will be logged instead of displayed

[Trên Windows, bạn có thể sử dụng type thay vì cat để hiển thị nội dung của tệp. ]

Nếu bạn chưa làm như vậy, bạn có thể tải xuống ví dụ này và các ví dụ khác được sử dụng trong cuốn sách này

Điều này sẽ in ra IDE “Cửa sổ tương tác” [hoặc thiết bị đầu cuối, nếu chạy tập lệnh từ dòng lệnh]. Luôn lưu thiết bị xuất chuẩn trước khi chuyển hướng nó, để bạn có thể đặt nó trở lại bình thường sau. Mở tệp để ghi. Nếu tệp không tồn tại, nó sẽ được tạo. Nếu tập tin tồn tại, nó sẽ bị ghi đè. Chuyển hướng tất cả đầu ra tiếp theo sang tệp mới mà bạn vừa mở. Điều này sẽ chỉ được "in" vào tệp nhật ký; . Đặt thiết bị xuất chuẩn trở lại như trước khi bạn sử dụng nó. Đóng tệp nhật ký

Chuyển hướng stderr hoạt động chính xác theo cùng một cách, sử dụng sys. stderr thay vì sys. tiêu chuẩn

Ví dụ 10. 10. Thông tin lỗi chuyển hướng

[you@localhost kgp]$ python stderr.py
[you@localhost kgp]$ cat error.log
Traceback [most recent line last]:
  File "stderr.py", line 5, in ?
    raise Exception, 'this error will be logged'
Exception: this error will be logged

Nếu bạn chưa làm như vậy, bạn có thể tải xuống ví dụ này và các ví dụ khác được sử dụng trong cuốn sách này

Mở tệp nhật ký mà bạn muốn lưu trữ thông tin gỡ lỗi. Chuyển hướng lỗi tiêu chuẩn bằng cách gán đối tượng tệp của tệp nhật ký mới mở cho thiết bị lỗi chuẩn. Tăng một ngoại lệ. Lưu ý từ đầu ra màn hình rằng điều này không in bất cứ thứ gì trên màn hình. Tất cả các thông tin truy nguyên bình thường đã được ghi vào lỗi. đăng nhập

Vì việc viết thông báo lỗi thành lỗi tiêu chuẩn rất phổ biến, nên có một cú pháp tốc ký có thể được sử dụng thay vì chuyển hướng nó hoàn toàn.

Ví dụ 10. 11. In sang stderr

>>> print 'entering function'
entering function
>>> import sys
>>> print >> sys.stderr, 'entering function' 
entering function

Cú pháp tốc ký này của câu lệnh in có thể được sử dụng để ghi vào bất kỳ tệp đang mở hoặc đối tượng giống tệp nào. Trong trường hợp này, bạn có thể chuyển hướng một câu lệnh in sang thiết bị lỗi chuẩn mà không ảnh hưởng đến các câu lệnh in tiếp theo

Mặt khác, đầu vào tiêu chuẩn là một đối tượng tệp chỉ đọc và nó đại diện cho dữ liệu chảy vào chương trình từ một số chương trình trước đó. Điều này có thể sẽ không có nhiều ý nghĩa đối với người dùng Mac OS cổ điển hoặc thậm chí cả người dùng Windows trừ khi bạn đã từng thông thạo dòng lệnh MS-DOS. Cách thức hoạt động của nó là bạn có thể xây dựng một chuỗi lệnh trong một dòng duy nhất để đầu ra của một chương trình trở thành đầu vào cho chương trình tiếp theo trong chuỗi. Chương trình đầu tiên chỉ xuất ra đầu ra tiêu chuẩn [không thực hiện bất kỳ chuyển hướng đặc biệt nào, chỉ thực hiện các câu lệnh in bình thường hoặc bất cứ điều gì], và chương trình tiếp theo đọc từ đầu vào tiêu chuẩn và hệ điều hành đảm nhiệm việc kết nối đầu ra của một chương trình với đầu vào của chương trình tiếp theo

Ví dụ 10. 12. Chuỗi lệnh

[you@localhost kgp]$ python kgp.py -g binary.xml         
01100111
[you@localhost kgp]$ cat binary.xml                      




  

0

1

\

[you@localhost kgp]$ cat binary.xml | python kgp.py -g - 10110001

Như bạn đã thấy trong phần , thao tác này sẽ in ra một chuỗi tám bit ngẫu nhiên, 0 hoặc 1. Điều này chỉ đơn giản là in ra toàn bộ nội dung của nhị phân. xml. [Người dùng Windows nên sử dụng type thay vì cat. ] Thay vì chỉ định một mô-đun [như nhị phân. xml], bạn chỉ định “-”, điều này khiến tập lệnh của bạn tải ngữ pháp từ đầu vào tiêu chuẩn thay vì từ một tệp cụ thể trên đĩa. [Thông tin thêm về cách điều này xảy ra trong ví dụ tiếp theo. ] Vì vậy, hiệu ứng giống như cú pháp đầu tiên, trong đó bạn đã chỉ định trực tiếp tên tệp ngữ pháp, nhưng hãy nghĩ đến các khả năng mở rộng ở đây. Thay vì chỉ đơn giản là làm mèo nhị phân. xml, bạn có thể chạy tập lệnh tự động tạo ngữ pháp, sau đó bạn có thể đưa tập lệnh đó vào tập lệnh của mình. Nó có thể đến từ bất cứ đâu. cơ sở dữ liệu hoặc một số tập lệnh meta tạo ngữ pháp hoặc bất kỳ thứ gì. Vấn đề là bạn không cần phải thay đổi kgp của mình. py để kết hợp bất kỳ chức năng nào trong số này. Tất cả những gì bạn cần làm là có thể lấy các tệp ngữ pháp từ đầu vào tiêu chuẩn và bạn có thể tách tất cả logic khác thành một chương trình khác

Vậy làm cách nào để tập lệnh “biết” đọc từ đầu vào tiêu chuẩn khi tệp ngữ pháp là “-”?

Ví dụ 10. 13. Đọc từ đầu vào tiêu chuẩn tính bằng kgp. py

Đây là chức năng openAnything từ hộp công cụ. py, mà bạn đã kiểm tra trước đây trong. Tất cả những gì bạn đã làm là thêm ba dòng mã vào đầu hàm để kiểm tra xem nguồn có phải là “-”; . tiêu chuẩn. Thực sự, đó là nó. Hãy nhớ rằng, stdin là một đối tượng giống như tệp có phương thức đọc, vì vậy phần còn lại của mã [tính bằng kgp. py, nơi bạn gọi openAnything] không thay đổi chút nào

Thiết bị xuất chuẩn đi đâu trong Python?

Trong trường hợp đơn giản nhất, thiết bị xuất chuẩn và thiết bị xuất chuẩn gửi đầu ra của chúng đến cùng một nơi. IDE Python [nếu bạn đang sử dụng] hoặc thiết bị đầu cuối [nếu bạn đang chạy Python từ dòng lệnh] .

stdin và stdout trong Python là gì?

stdin , stdout và stderr là các đối tượng tệp được xác định trước tương ứng với các luồng đầu vào, đầu ra và lỗi tiêu chuẩn của Python . Bạn có thể liên kết lại thiết bị xuất chuẩn và thiết bị xuất chuẩn với các đối tượng giống như tệp [các đối tượng cung cấp phương thức ghi chấp nhận đối số chuỗi] để chuyển hướng đích của thông báo lỗi và đầu ra.

Làm cách nào để sử dụng stdin trong Python?

sử dụng sys. stdin để đọc từ đầu vào tiêu chuẩn. Mô-đun sys stdin của Python được trình thông dịch sử dụng cho đầu vào tiêu chuẩn. .
Sử dụng hàm input[] để đọc dữ liệu stdin. Chúng ta cũng có thể sử dụng hàm input[] của Python để đọc dữ liệu đầu vào tiêu chuẩn. .
Đọc Đầu vào tiêu chuẩn bằng mô-đun fileinput. Chúng tôi cũng có thể sử dụng fileinput

Chủ Đề