Python chuyển hướng thiết bị xuất chuẩn sang quy trình khác

Theo mặc định, đầu ra tiêu chuẩn được in ra bàn điều khiển. Tuy nhiên, bạn có thể chuyển hướng đầu ra đó sang một tệp bằng bất kỳ chức năng nào sau đây

1. chuyển hướng vỏ

Cách tiếp cận phổ biến nhất để chuyển hướng đầu ra tiêu chuẩn sang một tệp là sử dụng chuyển hướng shell. Ưu điểm của phương pháp này là nó không yêu cầu bất kỳ thay đổi mã nào. Đây là cách bạn có thể chuyển hướng đầu ra stdoutstderr sang một tệp bằng cách sử dụng toán tử >

1

2

$ trăn chính. py > tệp.

 

Tải xuống mã

2. Sử dụng sys.stdout

Một giải pháp đơn giản khác để chuyển hướng đầu ra tiêu chuẩn sang tệp là đặt sys.stdout thành đối tượng tệp, như minh họa bên dưới

1

2

3

4

5

6

nhập sys

 

đường dẫn = 'đường dẫn/đến/một số/dir/tệp. txt'

sys. stdout = mở(đường dẫn, 'w')

in('Xin chào thế giới')

 

Tải xuống mã

3. Sử dụng chức năng $ cat music.mp3 > /dev/audio1

Một tùy chọn khác là sử dụng hàm

$ cat music.mp3 > /dev/audio
1 trong Python 3. 4 thiết lập trình quản lý bối cảnh để chuyển hướng sys.stdout sang tệp khác. Đây là một ví dụ làm việc

1

2

3

4

5

6

7

nhập contextlib

 

đường dẫn = 'đường dẫn/đến/một số/dir/tệp. txt'

với mở(đường dẫn, 'w') as f:

    với contextlib. redirect_stdout(f).

        in('Xin chào thế giới')<

 

Tải xuống mã

4. Lớp ghi nhật ký tùy chỉnh

Cuối cùng, bạn có thể viết lớp ghi nhật ký tùy chỉnh cho phù hợp với nhu cầu của mình. Để minh họa, lớp sau in đầu ra tiêu chuẩn cho cả bảng điều khiển và tệp

Chuyển hướng là một tính năng trong Linux để khi thực hiện lệnh, bạn có thể thay đổi các thiết bị đầu vào/đầu ra tiêu chuẩn. Quy trình công việc cơ bản của bất kỳ lệnh Linux nào là nó nhận đầu vào và đưa ra đầu ra

  • Thiết bị đầu vào tiêu chuẩn (stdin) là bàn phím
  • Thiết bị đầu ra tiêu chuẩn (stdout) là màn hình

Với chuyển hướng, đầu vào/đầu ra tiêu chuẩn ở trên có thể được thay đổi

Trong hướng dẫn này, chúng ta sẽ học-

  • Chuyển hướng đầu ra
  • chuyển hướng đầu vào
  • Bộ mô tả tệp (FD)
  • Chuyển hướng lỗi
  • Tại sao chuyển hướng lỗi?
  • ví dụ

Bấm vào đây nếu video không vào được

Chuyển hướng đầu ra

Ký hiệu ‘>‘ được sử dụng để chuyển hướng đầu ra (STDOUT)

Python chuyển hướng thiết bị xuất chuẩn sang quy trình khác


Thí dụ.
ls -al > listings

Ở đây, đầu ra của lệnh ls -al được chuyển hướng đến tệp “danh sách” thay vì màn hình của bạn

Python chuyển hướng thiết bị xuất chuẩn sang quy trình khác

Ghi chú. Sử dụng tên tệp chính xác trong khi chuyển hướng đầu ra lệnh sang một tệp. Nếu có một tệp hiện có cùng tên, lệnh được chuyển hướng sẽ xóa nội dung của tệp đó và sau đó nó có thể bị ghi đè. ”

Nếu bạn không muốn một tệp bị ghi đè mà muốn thêm nhiều nội dung hơn vào một tệp hiện có, thì bạn nên sử dụng toán tử ‘>>‘

Python chuyển hướng thiết bị xuất chuẩn sang quy trình khác

Bạn có thể chuyển hướng đầu ra tiêu chuẩn, không chỉ tệp mà còn cả thiết bị

$ cat music.mp3 > /dev/audio

Lệnh cat đọc file nhạc. mp3 và gửi đầu ra tới/dev/audio là thiết bị âm thanh. Nếu cấu hình âm thanh trong PC của bạn là chính xác, lệnh này sẽ phát tệp nhạc. mp3

chuyển hướng đầu vào

Ký hiệu ‘<‘ được sử dụng để chuyển hướng đầu vào (STDIN)

Python chuyển hướng thiết bị xuất chuẩn sang quy trình khác

Thí dụ. Chương trình mail trong Linux có thể giúp bạn gửi email từ Terminal

Bạn có thể nhập nội dung của email bằng bàn phím thiết bị tiêu chuẩn. Nhưng nếu bạn muốn đính kèm Tệp vào email, bạn có thể sử dụng toán tử định hướng lại đầu vào theo định dạng sau

Mail -s "Subject" to-address < Filename

Python chuyển hướng thiết bị xuất chuẩn sang quy trình khác

Điều này sẽ đính kèm tệp với email và nó sẽ được gửi đến người nhận

Các ví dụ trên rất đơn giản. Hãy xem xét một số kỹ thuật định hướng lại nâng cao sử dụng Trình mô tả tệp

Bộ mô tả tệp (FD)

Trong Linux/Unix, mọi thứ đều là tệp. Tệp thông thường, Thư mục và thậm chí cả Thiết bị đều là tệp. Mỗi Tệp có một số được liên kết được gọi là Bộ mô tả tệp (FD)

Màn hình của bạn cũng có Bộ mô tả tệp. Khi một chương trình được thực thi, đầu ra được gửi đến Bộ mô tả tệp của màn hình và bạn sẽ thấy đầu ra của chương trình trên màn hình của mình. Nếu đầu ra được gửi đến Bộ mô tả tệp của máy in, đầu ra của chương trình sẽ được in

Chuyển hướng lỗi

Bất cứ khi nào bạn thực thi một chương trình/lệnh tại thiết bị đầu cuối, 3 tệp luôn mở, viz. , đầu vào tiêu chuẩn, đầu ra tiêu chuẩn, sai số tiêu chuẩn

Python chuyển hướng thiết bị xuất chuẩn sang quy trình khác

Các tệp này luôn hiện diện bất cứ khi nào chương trình được chạy. Như đã giải thích trước một bộ mô tả tệp, được liên kết với từng tệp này

Bộ mô tả tệp của tệp
STDIN đầu vào tiêu chuẩn

0

STDOUT đầu ra tiêu chuẩn

1

Standard Error STDERR

2

Theo mặc định, dòng lỗi được hiển thị trên màn hình. Chuyển hướng lỗi đang định tuyến các lỗi đến một tệp không phải là màn hình

Tại sao chuyển hướng lỗi?

Định hướng lại lỗi là một trong những tính năng rất phổ biến của Unix/Linux

Người dùng UNIX thường xuyên sẽ cho rằng nhiều lệnh gây ra cho bạn rất nhiều lỗi

  • Chẳng hạn, trong khi tìm kiếm tệp, một người thường gặp phải lỗi từ chối quyền. Những lỗi này thường không giúp ích cho người đang tìm kiếm một tệp cụ thể
  • Trong khi thực thi các tập lệnh shell, bạn thường KHÔNG muốn các thông báo lỗi làm lộn xộn đầu ra của chương trình bình thường

Giải pháp là chuyển hướng lại các thông báo lỗi đến một tệp

ví dụ 1

$ myprogram 2>errorsfile

Python chuyển hướng thiết bị xuất chuẩn sang quy trình khác

Ở trên, chúng tôi đang thực hiện một chương trình có tên myprogram

Bộ mô tả tệp cho lỗi tiêu chuẩn là 2

Sử dụng “2>”, chúng tôi chuyển hướng đầu ra lỗi sang tệp có tên “errorfile”

Do đó, đầu ra của chương trình không bị lộn xộn với các lỗi

ví dụ 2

Đây là một ví dụ khác sử dụng câu lệnh find –

find . -name 'my*' 2>error.log


Sử dụng lệnh “find”, chúng tôi đang tìm kiếm “. ” thư mục hiện tại cho tệp có “tên” bắt đầu bằng “của tôi”

Python chuyển hướng thiết bị xuất chuẩn sang quy trình khác

ví dụ 3. Hãy xem một ví dụ phức tạp hơn,

Quản trị viên máy chủ thường xuyên, liệt kê các thư mục và lưu trữ cả lỗi và đầu ra tiêu chuẩn vào một tệp, tệp này có thể được xử lý sau. Đây là lệnh

ls Documents ABC> dirlist 2>&1

Nơi đây,

  • ghi đầu ra từ tệp này sang đầu vào của tệp khác. 2>&1 có nghĩa là STDERR chuyển hướng đến mục tiêu của STDOUT (là danh sách thư mục tệp)
  • Chúng tôi đang chuyển hướng đầu ra lỗi sang đầu ra tiêu chuẩn, do đó đang được chuyển hướng lại đến tệp dirlist. Do đó, cả đầu ra được ghi vào tệp dirlist

Python chuyển hướng thiết bị xuất chuẩn sang quy trình khác

Bản tóm tắt

  • Mỗi tệp trong Linux có một Bộ mô tả tệp tương ứng được liên kết với nó
  • Bàn phím là thiết bị đầu vào tiêu chuẩn trong khi màn hình của bạn là thiết bị đầu ra tiêu chuẩn
  • “>” là toán tử chuyển hướng đầu ra. “>>” nối đầu ra vào một tệp hiện có
  • “<” là toán tử chuyển hướng đầu vào
  • “>&”chuyển hướng đầu ra của tệp này sang tệp khác
  • Bạn có thể định hướng lại lỗi bằng cách sử dụng Bộ mô tả tệp 2 tương ứng của nó

Guru99 được tài trợ bởi Acunetix

Python chuyển hướng thiết bị xuất chuẩn sang quy trình khác


Acunetix, nhà phát triển trình quét bảo mật ứng dụng web cực kỳ chính xác đã tài trợ cho dự án Guru99 để giúp quét hơn 4500 lỗ hổng web một cách chính xác và ở tốc độ cao nhất