如何将stderr和stdout同时重定向到Python脚本的文件和屏幕?

时间:2018-02-24 15:49:30

标签: python redirect stdout stderr

我使用此代码将文件发送到我的ftp服务器。我想在我的日志文件中有错误登录屏幕和相同的追溯和错误。目前,在我的日志文件中只有错误名称。如何将stdout和stderr同时放在文件和屏幕上?

#!/usr/bin/env python3
# -*- coding: utf-8 -*-

import datetime
import ftplib
import sys


# FTP server login data
ftpserver_ip = '192.168.0.100'
username = 'uname'
password = 'upass'

# If there is command line argument, the first one is our file to upload
if len(sys.argv) > 1:
    upload_file = sys.argv[1]
else:
    print('No input file')
    sys.exit()

def ftpsend():
    try:
        # ftp server running on 'ftpserver_ip' on port 21
        session = ftplib.FTP(ftpserver_ip, username, password)
        file = open(upload_file, 'rb')
        session.storbinary('STOR '+upload_file, file)
        file.close()
        session.quit()
    except Exception as err:
        with open('error.log', 'w') as ferr:
            print(err)
            ferr.write(str(datetime.datetime.now()))
            ferr.write('\n')
            ferr.write(str(err))
        return None

    with open('OK.log', 'w') as fok:
        fok.write(str(datetime.datetime.now()))
        fok.write(" OK")
        print(datetime.datetime.now(), "OK")

ftpsend()

如果一切顺利,应创建文件OK.log。如果发生错误,请输入`error.log'应使用此内容创建,例如:

[Errno 2] No such file or directory: 'simple_table.pd'
Traceback (most recent call last):
  File "ftp-send.py", line 35, in ftpsend
    file = open(upload_file, 'rb')
FileNotFoundError: [Errno 2] No such file or directory: 'simple_table.pd'

0 个答案:

没有答案