将脚本中的任何错误打印到文件-stderr

时间:2018-10-29 15:45:21

标签: python console stderr

我有一个Python程序,该程序接受三个命令行参数-f(file1)-n(file2)-o(file3)。

程序的结构如下:

ffile=''
nfile=''
ofile=''

try:
   myopts, args = getopt.getopt(sys.argv[1:],"f:n:o:h:")
   for x,y in myopts:
       if x == '-f':
          ffile=y
       elif x == '-n':
          nfile=y
       elif x == '-o':
          ofile=y

   <do something here with the files>
except:
       sys.stderr("err.txt",w)
       sys.exit(2)

我想做的是:

  1. 如果缺少任何参数(-f,-n),则输出相应的错误。
    1. 将错误消息(无论可能是什么)打印到文件“ err.txt”。

但是,err.txt文件为空。我不确定发生了什么。我已经看到许多将stderr写入文件的问题,但是似乎无法回答我的问题。

1 个答案:

答案 0 :(得分:1)

如果您愿意改变自己的方法,我建议您不要尝试重新发明轮子,而是检查一些现有的python库来实现此功能。

有一个名为argparse 的库,可以很好地解析命令行参数并返回适当的错误消息,也许您会发现它很有用。

import argparse
p = argparse.ArgumentParser(description='My Program', formatter_class=argparse.ArgumentDefaultsHelpFormatter)
p.add_argument("-f", type=str, help="-f file", required=True)
p.add_argument("-n", type=str, help="-n file", required=True)
p.add_argument("-o", type=str, help="-o file", default=None)

args = p.parse_args() # will throw error if required -f and -n args not passed

在错误记录方面,您可以尝试使用python logging库。可将该库配置为将信息记录到stdout,文本文件等,并且可能足够灵活以满足您的要求。