我正在尝试在python中实现日志记录。这是mycode。我正在尝试在同一日志文件中获取控制台输出。我正在使用python 2.7
def cal_val(i):
logger.info("added valu is {}".format(i+1))
if __name__ == "__main__":
logging.basicConfig(filename="sample1.log",format='%(asctime)s %(levelname)-8s %(message)s',level=logging.INFO,datefmt='%Y-%m-%d_%H:%M:%S')
# Creating an object
logger = logging.getLogger()
for i in range(1,5):
logger.info("First valu is {}".format(i))
cal_val(i)
shecmd="spark-submit C:\PycharmProjects\\Finaltst\\from_dt_to_dt.py --executor-memory 5G --total-executor-cores 2"
logger.info("Executing shell command------>")
logger.info(shecmd)
proc=subprocess.Popen(shecmd,stdout=subprocess.PIPE,stderr=subprocess.STDOUT,shell=True)
for line in proc.stdout:
logger.info(line)
正如您在高亮部分以及我在代码中提供的logger所看到的那样,它正在将logger用作控制台,并导致如下所示的行格式不正确。它还在行首添加b'和\ r,\ n在行尾
2020-08-29_12:19:23 INFO b'20/08/29 12:19:23 INFO SecurityManager: Changing modify acls to: System\r\n'
有什么方法可以吸引下一行
for line in proc.stdout:
logger.info(line)
我可以编写诸如print()之类的东西,它只会在同一日志文件中打印控制台输出?
答案 0 :(得分:0)
由于从Popen stdout获得的“行”是字节类型,因此需要将其转换为字符串类型。
for line in proc.stdout:
logger.info(line.decode())