Thiết bị xuất chuẩn dup2 python

thiết lập def (tự, cfg). bản thân. loglevel = bản thân. LOG_LEVELS. nhận được (cfg. mức đăng nhập. thấp hơn (), ghi nhật ký. THÔNG TIN) bản thân. error_log. setLevel(tự. loglevel) bản thân. truy cập_log. setLevel(đăng nhập. THÔNG TIN) #thiếtgunicorn. xử lý lỗi nếu tự. cfg. capture_output và cfg. nhật ký lỗi. = "-". cho luồng trong sys. thiết bị xuất chuẩn, hệ thống. tiêu chuẩn. dòng. tuôn ra () tự. tệp nhật ký = mở (cfg. errorlog, "a+") os. dup2(tự. tệp nhật ký. fileno(), sys. tiêu chuẩn. fileno()) hệ điều hành. dup2(tự. tệp nhật ký. fileno(), sys. tiêu chuẩn. fileno()) tự. _set_handler( tự. error_log, cfg. nhật ký lỗi, ghi nhật ký. Trình định dạng (tự. error_fmt, tự. datefmt), ) # đặt gunicorn. truy cập trình xử lý nếu cfg. accesslog không phải là Không có. bản thân. _set_handler( tự. truy cập_log, cfg. nhật ký truy cập, fmt=ghi nhật ký. Trình định dạng (tự. access_fmt), luồng=sys. thiết bị xuất chuẩn, ) # đặt trình xử lý nhật ký hệ thống nếu cfg. nhật ký hệ thống. bản thân. _set_syslog_handler(tự. error_log, cfg, tự. syslog_fmt, "lỗi") tự. _set_syslog_handler(tự. access_log, cfg, bản thân. syslog_fmt, "truy cập") dictConfig(ĐĂNG NHẬP)

Bây giờ,

file_object = open('filename')
lines = file_object.readlines()
2chỉ là một tệp đối tượng 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
file_object = open('filename')
lines = file_object.readlines()
3

for something in sys.stdin:
    some stuff here

sẽ lặp lại thông tin qua đầu vào tiêu chuẩn cho đến khi đạt đến phần cuối của tệp. And this thing also so

lines = sys.stdin.readlines()

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 tệp đối tượng

Thứ hai, nó được đọc từ đâu? . Trên Windows, nó là xử lý tệp 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 thường bằng shell (như bash hoặc cmd. exe) bằng cách sử dụng cú pháp như sau

myprog.py < input_file.txt 

Điều đó làm thay đổi bộ mô tả tệp bằng cách 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

file_object = open('filename')
lines = file_object.readlines()
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ể
file_object = open('filename')
lines = file_object.readlines()
5 nếu bạn dũng cảm)

25 hữu ích 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

file_object = open('filename')
lines = file_object.readlines()
6và
file_object = open('filename')
lines = file_object.readlines()
7. Theo tôi hiểu, cách dễ nhất để thực hiện điều này là thêm phụ thuộc. đã sửa đổi mã để nó nhận các luồng bắt đầu vào và bắt đầu làm đối số, sử dụng
file_object = open('filename')
lines = file_object.readlines()
2và
file_object = open('filename')
lines = file_object.readlines()
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
file_object = open('filename')
lines = file_object.readlines()
6các cuộc gọi

file_object = open('filename')
lines = file_object.readlines()
2

Tuy nhiên,

file_object = open('filename')
lines = file_object.readlines()
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 động vi của nó không?

file_object = open('filename')
lines = file_object.readlines()
4

Tôi đã xem xét việc phát triển khai

file_object = open('filename')
lines = file_object.readlines()
7, và nó thực hiện khá nhiều phép thuật, gọi là
for something in sys.stdin:
    some stuff here
3và kiểm tra
for something in sys.stdin:
    some stuff here
4và
for something in sys.stdin:
    some stuff here
5hơn là gọi bất kỳ
for something in sys.stdin:
    some stuff here
6 phương pháp nào - tôi không biết bắt đầu từ đâu với công việc lệch lạc của họ

  • con trăn
  • tiêm phụ thuộc
  • trăn-3. x
  • chế giễu
  • tiêu chuẩn

3 hữu ích 4 bình luận 4. 0k xem chia sẻ

câu trả lời

6

Thiết bị xuất chuẩn dup2 python

Nếu bạn gán một đối tượng giống tệp cho hàm

file_object = open('filename')
lines = file_object.readlines()
2 của Python, thì
file_object = open('filename')
lines = file_object.readlines()
7hàm của Python sẽ sử dụng nó thay cho đầu vào chuẩn. Nhưng hãy nhớ gán lại
file_object = open('filename')
lines = file_object.readlines()
2 cho tiêu chuẩn sau khi bạn hoàn tất. Thủ thuật tương tự áp dụng cho
file_object = open('filename')
lines = file_object.readlines()
9. Bạn có thể làm điều gì đó như sau

for something in sys.stdin:
    some stuff here
4

Hai dòng này

file_object = open('filename')
lines = file_object.readlines()
0

sẽ sử dụng các tệp được định nghĩa duy nhất (

lines = sys.stdin.readlines()
9và
myprog.py < input_file.txt 
0) thay vì đầu vào tiêu chuẩn và đầu ra tiêu chuẩn

CẬP NHẬT. Nếu bạn không muốn xử lý các tệp vật lý, hãy xem

myprog.py < input_file.txt 
1mô-đun. Nó cung cấp lớp
myprog.py < input_file.txt 
2 cho phép bạn thực hiện các dòng văn bản hoạt động trong bộ nhớ