我搜索了Google,Stack Overflow和我的Python用户指南,但没有找到一个简单,可行的答案。
我在Windows 7 x64计算机上创建了一个文件c:\ goat.txt,并尝试将“test”打印到该文件。我根据StackOverflow上提供的示例尝试了以下内容:
此时我不想使用日志模块,因为我不能从文档中了解到基于二进制条件创建简单日志。打印很简单但是如何重定向输出并不明显。
一个简单明了的例子,我可以进入我的interperter是最有帮助的。
此外,任何有关信息网站的建议都表示赞赏(不是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
答案 0 :(得分:104)
如果您使用的是Python 2.5或更早版本,请打开该文件,然后在重定向中使用该文件对象:
log = open("c:\\goat.txt", "w")
print >>log, "test"
如果您使用的是Python 2.6或2.7,则可以将print用作函数:
from __future__ import print_function
log = open("c:\\goat.txt", "w")
print("test", file = log)
如果您使用的是Python 3.0或更高版本,则可以省略将来的导入。
如果要全局重定向打印语句,可以设置sys.stdout:
import sys
sys.stdout = open("c:\\goat.txt", "w")
print ("test sys.stdout")
答案 1 :(得分:47)
要重定向所有打印的输出,您可以执行以下操作:
import sys
with open('c:\\goat.txt', 'w') as f:
sys.stdout = f
print "test"
答案 2 :(得分:15)
一种稍微粗俗的方式(与上面的答案不同,它们都是有效的)只是通过控制台将输出定向到文件中。
所以想象你有main.py
if True:
print "hello world"
else:
print "goodbye world"
你可以做到
python main.py >> text.log
然后text.log将获得所有输出。
如果您已经有一堆打印语句并且不想单独更改它们以打印到特定文件,这很方便。只需在上层进行操作并将所有打印件指向文件(唯一的缺点是您只能打印到单个目的地)。
答案 3 :(得分:3)
在file
函数中使用print
参数,每个打印可以有不同的文件:
print('Redirect output to file', file=open('/tmp/example.log', 'w'))
答案 4 :(得分:3)
基于先前的答案,我认为这是执行(简单)上下文管理器样式的完美用例:
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__
然后:
with StdoutRedirection("path/to/file"):
print("Hello world")
向StdoutRedirection
类添加一些功能(例如,允许您更改路径的方法)真的很容易
答案 5 :(得分:1)
o = open('outfile','w')
print('hello world', file=o)
my $printname = "outfile"
open($ph, '>', $printname)
or die "Could not open file '$printname' $!";
print $ph "hello world\n";
请不要编辑这些简单的2行代码 并将其替换为您必须使用的内容,..打开每个打印语句。这对我没有用-只需添加您自己的评论或回复即可。就我而言,我为一个输入文件打开了两个输出文件,然后关闭并为第二个输入文件再次打开了它们,并再次遍历了例程。
答案 6 :(得分:1)
from __future__ import print_function
log = open("s_output.csv", "w",encoding="utf-8")
for i in range(0,10):
print('\nHeadline: '+l1[i]', file = log)
请添加encoding="utf-8"
,以免出现“'charmap'编解码器无法对位置12-32中的字符进行编码的错误:字符映射到“
答案 7 :(得分:-2)
将sys.stdout重定向到打开的文件句柄,然后所有打印的输出转到文件:
import sys
filename = open("outputfile",'w')
sys.stdout = filename
print "Anything printed will go to the output file"