Tôi đã tìm kiếm Google, Stack Overflow và hướng dẫn người dùng Python của tôi và chưa tìm thấy câu trả lời đơn giản, khả thi cho câu hỏi.
Tôi đã tạo một tệp C: \ GOAT.TXT trên máy Windows 7 x64 và đang cố gắng in "Kiểm tra" vào tệp. Tôi đã thử những điều sau dựa trên các ví dụ được cung cấp trên StackOverflow:
Tại thời điểm này, tôi không muốn sử dụng mô -đun nhật ký vì tôi không hiểu từ tài liệu để tạo nhật ký đơn giản dựa trên điều kiện nhị phân. In là đơn giản tuy nhiên làm thế nào để chuyển hướng đầu ra là không rõ ràng.
Một ví dụ đơn giản, rõ ràng mà tôi có thể nhập vào bộ interter của mình là hữu ích nhất.
Ngoài ra, bất kỳ đề xuất nào cho các trang web thông tin đều được đánh giá cao [không phải Pydocs].
import sys
print['test', file=open['C:\\goat.txt', 'w']] #fails
print[arg, file=open['fname', 'w']] # above based upon this
print>>destination, arg
print>> C:\\goat.txt, "test" # Fails based upon the above
wjandrea
25.1k8 Huy hiệu vàng53 Huy hiệu bạc73 Huy hiệu đồng8 gold badges53 silver badges73 bronze badges
hỏi ngày 5 tháng 11 năm 2010 lúc 23:10Nov 5, 2010 at 23:10
1
Nếu bạn đang sử dụng Python 2.5 hoặc sớm hơn, hãy mở tệp và sau đó sử dụng đối tượng tệp trong chuyển hướng của bạn:
log = open["c:\\goat.txt", "w"]
print >>log, "test"
Nếu bạn đang sử dụng Python 2.6 hoặc 2.7, bạn có thể sử dụng in như một chức năng:
from __future__ import print_function
log = open["c:\\goat.txt", "w"]
print["test", file = log]
log.close[]
Nếu bạn đang ở trên Python 3.0 trở lên, thì bạn có thể bỏ qua nhập khẩu trong tương lai.
Nếu bạn muốn chuyển hướng toàn cầu các câu lệnh in của mình, bạn có thể đặt sys.stdout:
import sys
sys.stdout = open["c:\\goat.txt", "w"]
print ["test sys.stdout"]
Đã trả lời ngày 5 tháng 11 năm 2010 lúc 23:15Nov 5, 2010 at 23:15
Eli Courtwrighteli CourtwrightEli Courtwright
Phim thương hiệu vàng 180K6666 gold badges209 silver badges256 bronze badges
4
Để chuyển hướng đầu ra cho tất cả các bản in, bạn có thể làm điều này:all prints, you can do this:
import sys
with open['c:\\goat.txt', 'w'] as f:
sys.stdout = f
print "test"
Matthias
4.28112 Huy hiệu vàng43 Huy hiệu bạc80 Huy hiệu đồng12 gold badges43 silver badges80 bronze badges
Đã trả lời ngày 5 tháng 11 năm 2010 lúc 23:56Nov 5, 2010 at 23:56
Koloboskoloboskolobos
9087 Huy hiệu bạc12 Huy hiệu đồng7 silver badges12 bronze badges
2
Một cách hơi hackier [khác với câu trả lời ở trên, tất cả đều hợp lệ] sẽ chỉ cần hướng đầu ra vào một tệp thông qua bảng điều khiển.
Vì vậy, hãy tưởng tượng bạn đã có
log = open["c:\\goat.txt", "w"]
print >>log, "test"
4if True:
print "hello world"
else:
print "goodbye world"
Bạn có thể làm
python main.py >> text.log
và sau đó Text.log sẽ nhận được tất cả các đầu ra.
Điều này rất tiện lợi nếu bạn đã có một loạt các câu lệnh in và không muốn thay đổi chúng một cách riêng lẻ để in vào một tệp cụ thể. Chỉ cần thực hiện nó ở cấp trên và hướng tất cả các bản in vào một tệp [chỉ có nhược điểm là bạn chỉ có thể in vào một đích duy nhất].
Đã trả lời ngày 25 tháng 10 năm 2014 lúc 0:10Oct 25, 2014 at 0:10
Tristan Taotristan TaoTristan Tao
84510 Huy hiệu bạc27 Huy hiệu đồng10 silver badges27 bronze badges
1
Dựa trên các câu trả lời trước, tôi nghĩ rằng đó là một trường hợp sử dụng hoàn hảo để thực hiện nó [đơn giản] Phong cách quản lý bối cảnh:
import sys
class StdoutRedirection:
"""Standard output redirection context manager"""
def __init__[self, path]:
self._path = path
def __enter__[self]:
sys.stdout = open[self._path, mode="w"]
return self
def __exit__[self, exc_type, exc_val, exc_tb]:
sys.stdout.close[]
sys.stdout = sys.__stdout__
và sau đó:
with StdoutRedirection["path/to/file"]:
print["Hello world"]
Ngoài ra, sẽ rất dễ dàng để thêm một số chức năng vào lớp
log = open["c:\\goat.txt", "w"]
print >>log, "test"
5 [ví dụ: một phương thức cho phép bạn thay đổi đường dẫn]Đã trả lời ngày 15 tháng 10 năm 2018 lúc 14:43Oct 15, 2018 at 14:43
z33kz33kz33k
2.8602 Huy hiệu vàng23 Huy hiệu bạc35 Huy hiệu Đồng2 gold badges23 silver badges35 bronze badges
Sử dụng đối số
log = open["c:\\goat.txt", "w"]
print >>log, "test"
6 Trong hàm log = open["c:\\goat.txt", "w"]
print >>log, "test"
7, bạn có thể có các tệp khác nhau trên mỗi bản in:print['Redirect output to file', file=open['/tmp/example.log', 'w']]
Đã trả lời ngày 22 tháng 11 năm 2017 lúc 15:44Nov 22, 2017 at 15:44
Đơn giản trong Python 3.6
log = open["c:\\goat.txt", "w"]
print >>log, "test"
0Tôi đang tìm kiếm thứ gì đó như tôi đã làm ở Perl
log = open["c:\\goat.txt", "w"]
print >>log, "test"
1
OneCricketeer
162K18 Huy hiệu vàng122 Huy hiệu bạc224 Huy hiệu đồng18 gold badges122 silver badges224 bronze badges
Đã trả lời ngày 9 tháng 3 năm 2019 lúc 16:24Mar 9, 2019 at 16:24
Clint Clintclint
Phù hiệu bằng đồng 2133 bronze badges
log = open["c:\\goat.txt", "w"]
print >>log, "test"
2Vui lòng thêm
log = open["c:\\goat.txt", "w"]
print >>log, "test"
8 để tránh lỗi "'Charmap' codec không thể mã hóa các ký tự ở vị trí 12-32: Bản đồ ký tự thành"
OneCricketeer
162K18 Huy hiệu vàng122 Huy hiệu bạc224 Huy hiệu đồng18 gold badges122 silver badges224 bronze badges
Đã trả lời ngày 9 tháng 3 năm 2019 lúc 16:24Jun 7, 2019 at 9:25
Clint ClintSijin John
Phù hiệu bằng đồng 2136 silver badges15 bronze badges
Vui lòng thêm
log = open["c:\\goat.txt", "w"]
print >>log, "test"
8 để tránh lỗi "'Charmap' codec không thể mã hóa các ký tự ở vị trí 12-32: Bản đồ ký tự thành"log = open["c:\\goat.txt", "w"]
print >>log, "test"
3
fatal_error
Đã trả lời ngày 7 tháng 6 năm 2019 lúc 9:252 gold badges17 silver badges16 bronze badges
Sijin Johnsijin JohnJun 26, 2014 at 17:04
3