Python:sys.stderr上的一些新手问题,并使用函数作为参数

我刚开始使用Python,也许我太担心太多了,但无论如何……

log = "/tmp/trefnoc.log"

def logThis (text, display=""):
    msg = str(now.strftime("%Y-%m-%d %H:%M")) + " TREfNOC: " + text
    if display != None:
        print msg + display
    logfile = open(log, "a")
    logfile.write(msg + "\n")
    logfile.close()
    return msg

def logThisAndExit (text, display=""):
    msg = logThis(text, display=None)
    sys.exit(msg + display)

这是有效的,但我不喜欢它的样子.有没有更好的方法来写这个(可能只有1个功能)并且有any other thing我应该关注退出吗?

现在到一些背景(但不是约trefnoc)……

有时我会调用logThis来记录和显示.其他时候我想打电话然后退出.最初我这样做:

logThis ("ERROR. EXITING")
sys.exit()

然后我认为这不会正确设置stderr,因此当前代码显示在顶部.

我的第一个想法是将“sys.exit”作为参数传递,并定义logThis(“ERROR.EXITING”,call = sys.exit)定义如下(仅显示相关的差异部分):

def logThis (text, display="", call=print):
    msg = str(now.strftime("%Y-%m-%d %H:%M")) + " TREfNOC: " + text
    call msg + display

但这显然不起作用.我认为Python不会将函数存储在变量中.我不能(很快)找到任何地方,如果Python可以有变量取功能!也许使用eval函数?我真的总是尽量避免它们,所以.当然我想过使用if而不是另一个def,但这不会更好或更糟.

无论如何,有什么想法吗?

解决方法:

没有理由“logThisAndExit”,它不会为你输入多少钱

sys.exit(logThis(text)+display)

(比较logThisAndExit(文本,显示))

要么

sys.exit(logThis(text))

(比较logThisAndExit(文本))

并不是说我完全确定你为什么喜欢将格式化为日志行的退出消息.

回答你的原始问题:你缺少括号:call(msg display)工作正常.但是我认为这对于记录/退出事物来说是过度的过度工作.维护代码的任何人都必须了解您的功能,以了解它何时退出以及何时退出.

上一篇:open("/dev/null",o_rdwr)的问题


下一篇:linux – 将带日期的stderr重定向到Cron的日志文件