我的问题类似于redirect prints to log file

去年开始使用Python进行编码时,直到现在我还不了解logging
问题是代码越来越大。

我一直在尝试给出的解决方案,但是它们都无法正常工作,因为此代码包含input()print()os.system()
最接近的解决方案是从他的answer中的shx2How to duplicate sys.stdout to a log file?

假设这是代码

import os, sys 
 
class multifile(object): 
    def __init__(self, files): 
        self._files = files 
    def __getattr__(self, attr, *args): 
        return self._wrap(attr, *args) 
    def _wrap(self, attr, *args): 
        def g(*a, **kw): 
            for f in self._files: 
                res = getattr(f, attr, *args)(*a, **kw) 
            return res 
        return g 
 
sys.stdout = multifile([ sys.stdout, open('log.txt', 'w') ]) 
 
name = input("\nWhat is your name: ") 
print("Your name is",name) 
 
age = input("\nHow old are you: ") 
print("You're ",age) 
 
print("\nYour IP Address is: ") 
os.system('ipconfig | findstr IPv4') 

控制台输出

C:\>python script.py 
 
What is your name: ABC 
Your name is ABC 
 
How old are you: 10 
You're  10 
 
Your IP Address is: 
   IPv4 Address. . . . . . . . . . . : 127.0.0.1 
 
C:\> 

从控制台输出的 print毫无问题地被重定向到 log.txt,但是 inputos.system没有问题

log.txt输出

What is your name: Your name is ABC 
 
How old are you: You're  10 
 
Your IP Address is:  

是否可以将控制台上的所有内容(完全相同)转换为 log.txt

请您参考如下方法:

一种选择是将输出重定向到文件

C:\>python script.py > filename.txt 

我尝试了这个,似乎可以产生您想要的东西。尽管您不会输入提示(例如,“您叫什么名字”或“您几岁”),但这样做只是用光标在空白行上。以 this image为例。


评论关闭
IT序号网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!