Python重定向命令输出到日志文件

时间:2020-06-24 13:35:21

标签: python python-3.x

我已经编写了Python代码,可以在Scappy API下调用:

sendp(packet, iface=adapter_name)

代码工作正常,但问题在于它在控制台上的以下行中打印,在该行中,执行上述命令的次数为多次:

Sent 1 packets.                                                                                                         
.

我需要隐藏控制台输出,所以我尝试:

old_stdout = sys.stdout
sys.stdout = log_file_name

但是我得到了例外:

    sendp(packet, iface=adapter_name)
  File "C:\Python36\lib\site-packages\scapy\sendrecv.py", line 315, in sendp
    verbose=verbose, realtime=realtime, return_packets=return_packets)
  File "C:\Python36\lib\site-packages\scapy\sendrecv.py", line 289, in __gen_send
    print("\nSent %i packets." % n)
AttributeError: 'str' object has no attribute 'write'

如何实现目标?

1 个答案:

答案 0 :(得分:0)

如果您要重定向到文件,则有一个先前回答的问题: Redirect stdout to a file in Python?

以下示例(从python文档)重定向到内存字符串:

import io
from contextlib import redirect_stdout
f = io.StringIO()
with redirect_stdout(f):
    help(pow)
s = f.getvalue()

后面的示例(如果您只是想抑制sys.stdout),则尝试 了解它是如何工作的:print将尝试访问write的{​​{1}}方法,因此我将其替换为具有不执行任何操作的write方法的类。

sys.stdout