相关疑难解决方法(0)

如何将sys.stdout复制到日志文件?

编辑:因为似乎没有解决方案,或者我正在做一些没人知道的非标准的东西 - 我会修改我的问题也要问:当python应用程序创建时,完成日志记录的最佳方法是什么很多系统调用?

我的应用程序有两种模式.在交互模式下,我希望所有输出都转到屏幕以及日志文件,包括来自任何系统调用的输出.在守护程序模式下,所有输出都将转到日志中.守护进程模式很好用os.dup2().我无法找到一种方法将所有输出"发送"到交互模式的日志,而无需修改每个系统调用.


换句话说,我想要命令行'tee'的功能,用于python应用程序生成的任何输出,包括系统调用输出.

澄清:

要重定向所有输出,我会做这样的事情,并且效果很好:

# open our log file
so = se = open("%s.log" % self.name, 'w', 0)

# re-open stdout without buffering
sys.stdout = os.fdopen(sys.stdout.fileno(), 'w', 0)

# redirect stdout and stderr to the log file opened above
os.dup2(so.fileno(), sys.stdout.fileno())
os.dup2(se.fileno(), sys.stderr.fileno())
Run Code Online (Sandbox Code Playgroud)

关于这一点的好处是它不需要来自其余代码的特殊打印调用.该代码还运行一些shell命令,因此不必单独处理每个输出.

简单地说,我想做同样的事情,除了重复而不是重定向.

起初以为我认为简单地扭转它们dup2应该有效.为什么不呢?这是我的测试:

import os, sys

### my broken solution:
so = se = open("a.log", 'w', 0)
sys.stdout = os.fdopen(sys.stdout.fileno(), 'w', 0)

os.dup2(sys.stdout.fileno(), so.fileno())
os.dup2(sys.stderr.fileno(), se.fileno()) …
Run Code Online (Sandbox Code Playgroud)

python tee

140
推荐指数
11
解决办法
10万
查看次数

如何从Python函数调用中捕获stdout输出?

我正在使用一个对象做某事的Python库

do_something(my_object)
Run Code Online (Sandbox Code Playgroud)

并改变它.这样做时,它会向stdout打印一些统计信息,我想抓住这些信息.适当的解决方案是改变do_something()以返回相关信息,

out = do_something(my_object)
Run Code Online (Sandbox Code Playgroud)

但在开始讨论do_something()这个问题之前还需要一段时间.作为一种解决方法,我考虑解析do_something()对stdout的任何写入.

如何在代码中的两点之间捕获stdout输出,例如,

start_capturing()
do_something(my_object)
out = end_capturing()
Run Code Online (Sandbox Code Playgroud)

python stdout capture

93
推荐指数
2
解决办法
5万
查看次数

防止在Python的批处理控制台中打印函数

好吧,标题似乎对我来说足够了.我使用一些功能,在某些点打印控制台中的东西.由于我无法修改它们,我想知道在使用这些功能时是否存在不打印的解决方案.

非常感谢 !

尼科

python printing batch-file

20
推荐指数
3
解决办法
1万
查看次数

类似于打印的函数,用于将字符串写入文本文件

我想在Python中编写一个函数来获取参数print,但不是将字符串打印到stdout,我想将格式化的字符串写入文本文件.

我如何定义这样的函数参数的参数来接受字符串格式化,我想知道吗?

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

print "Test"
Run Code Online (Sandbox Code Playgroud)

MyLog "Test"
Run Code Online (Sandbox Code Playgroud)

但是也应该支持%rguments.到目前为止,我只想出这个:

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

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

python arguments function

2
推荐指数
1
解决办法
850
查看次数

标签 统计

python ×4

arguments ×1

batch-file ×1

capture ×1

function ×1

printing ×1

stdout ×1

tee ×1