写出a不会给出新文件,但也没有错误

时间:2014-10-17 18:19:29

标签: python python-2.7 command-line-arguments argparse sys

目标:

  1. 在argparse中论证,
  2. 测试该参数是否为真
  3. 如果为true,则使用在该参数之后指定的名称编写一个文件
  4. 例如:  在命令行中:

      

    $ python printfile.py --out_arg fileOutput.txt

    ...会在与printfile.py

    相同的目录中生成fileOutput.txt

    代码:

    def parse_arguments():
        options = parse_arguments()
        #output arguments
        parser.add_argument("--out_arg", action='store', default=False, dest='out_arg',  
         help="""Output file """)
    
    def print_output(seqID, seq, comm):
        # "a" append is used since this is the output of a for loop generator
        if options.out_arg
            outputfh = open(options.out_33,"a")
            outputfh.write("@{}\n{}\n{}\n+".format(seqID, seq, comm))
        else:
            sys.stderr.write("ERR: sys.stdin is without sequence data")
    

    然而,当我从def main()调用print_output时 - 未显示 - 传递我感兴趣的元组(seqID,seq,comm),没有写入文件,也没有给出错误消息。是不是将存储文件存储为dest的argparse参数?在尝试写入时是否使用了文件句柄?

1 个答案:

答案 0 :(得分:2)

您永远不会在输出文件上调用close。 Python的写作在某种程度上是缓冲的,如果你不打电话给flushclose,你可以根据doc进行缓存。文件中的输出(或简称文件中的文件)。

您应始终使用with open() as ofile:语法执行文件IO,以确保文件已正确刷新/关闭:

if options.out_arg:
    with open(options.out_33, 'a') as outputfh:
        outputfh.write(...)
else:
    ...

当然,所有这些都假设您实际上在某处调用 print_output,而您的代码并未显示。并且options.out_33是一个相对路径,而不是绝对路径,否则文件不会在你期望的地方结束。