2

我想在 Python 中编写一个函数,它将像 dos 一样接受参数print,但不是将字符串打印到标准输出,我想将格式化的字符串写入文本文件。

我想知道如何为这样的函数参数定义参数以接受字符串格式?

我正在寻找可以替代的东西

print "Test"

MyLog "Test"

但也应支持 % 参数。到目前为止,我只提出了这个:

def logger(txt):    
fh = open (LOGFILE, "a") #Get handle in append mode
fh.write(txt)
fh.close()
print txt
return True 

这适用于简单的字符串,但我认为它不会接受 % 参数,我也不能像logger "TEST"那样调用它

4

3 回答 3

5

您可以使用“print chevron”语句来执行您想要的操作,如下所示:

with open('filename.txt', 'w') as f:
  print >> f, my_object

请参阅打印语句的文档

当然,使用print()Martijn Pieters建议的函数可能是更好的做法。

更新

如果我将您的logger函数更改为使用 print chevron 语法,我会得到:

def logger(txt):    
  fh = open (LOGFILE, "a") #Get handle in append mode
  fh.write(txt)
  fh.close()
  print >>fh, txt
  return True 

如果你像这样调用这个函数:

now, duration = 4.0, 2.0
logger("User request at %f time took %f seconds." % (now, duration))

您的日志文件中将有如下所示的一行:

User request at 4.0 time took 2.0 seconds.

所以你可以用它来%格式化(虽然你真的应该看看新式格式化),但你不能这样称呼它:

logger "User request at %f time took %f seconds." % (now, duration)

那是因为 print 是一个简单的 statement,它是一种语言级别的构造,你不能将它们添加到 Python 中。

于 2012-11-07T17:40:39.277 回答
4

print() 已经让你这样做了:

print(somestring, file=someopenfile)

如果您使用的是 python 2,请使用from __future__ import print_function来获得相同的功能。

您始终可以使用与函数相同的参数来实现print函数并将其用作替换,或者使用通配符参数 ( *args, **kw),然后file根据需要添加关键字参数。您始终可以通过以下结构访问原始内置print()函数:__builtins__

def print(*args, **kw):
    if 'file' not in kw:
        # print to a file instead of stdout
        kw['file'] = someopenfile
    return __builtins__.print(*args, **kw)
于 2012-11-07T17:38:11.837 回答
1

由于默认print输出到,您可以按照我的这个答案中的描述sys.stdout创建一个,这将允许您使用 regular ,无论您使用的是语句还是函数版本。contextmanagerprint

于 2012-11-07T18:23:25.007 回答