【问题标题】:Printing an python script output to BOTH a text file and command window将 python 脚本输出打印到文本文件和命令窗口
【发布时间】:2014-06-06 19:49:30
【问题描述】:

所以我知道如何执行 python 脚本并使用 os.command 甚至子进程在命令窗口中输出。我也知道将输出捕获到文本文件是通过 os.command('my command > me.txt".

我的问题是: 有没有办法用一个命令来做这两个?即执行python脚本,将输出捕获到文本文件并显示在命令窗口上?

如果这不可能,这是另一个问题: 我要执行的命令最多需要 8 分钟才能完成,并在文本文件中最多写入 300 行。我可以在命令仍在执行时访问文本文件以便在不等待命令完成执行的情况下获取一些数据吗?例如每 1 分钟访问一次文本文件?

如果两者都不可能,那么这也可以完成工作: 当我的命令成功执行时,它会在 cmd 以及许多其他行上打印出 Done 语句。如果打印了“Done”字符串或者需要在文本文件中捕获它以使该搜索发生,我可以签入 cmd 吗?

【问题讨论】:

  • 您是在谈论将子进程的结果打印到文件和标准输出,还是指的是 python 文件本身的所有输出?这是两个完全不同的问题。要重定向所有 python 执行输出,请查看这篇文章:stackoverflow.com/questions/14906764/…
  • 你试过这个./script.py > output.txt | type output.txt吗?
  • 鲍勃,我说的是把子进程的结果打印到文件和标准输出而不是 python 文件的打印输出
  • Pvel,每次我运行你的命令都会崩溃。它在 cmd 和文本文件中打印第一 2 行,然后崩溃
  • 也许您可以将stdout 替换为this 答案中描述的类的实例。

标签: python python-2.7 command-line cmd window


【解决方案1】:

在将命令输出回显到标准输出时保存命令输出的最简单方法是使用tee

$ python script.py | tee logfile.log

如果您想在写入文件时关注文件的输出,请使用tail:

$ tail -f logfile

您可能希望立即unbufferflush 输出,以便能够在整行或缓冲区填满之前读取输出:

$ unbuffer python script.py > logfile
$ tail -f logfile

print ("to file..", flush = True)

【讨论】:

    【解决方案2】:

    如果您可以在脚本中而不是从命令行中执行此操作,那将非常容易。

    with open("output.txt", "w") as output:
        print>>output, "what you want as output" #prints to output file
        print "what you want as output" #prints to screen 
    

    【讨论】:

    • 伙计,您的脚本在 cmd 中启动,但几秒钟后崩溃 + 它不会在 txt 文件中打印任何内容。因此,当我像您的示例一样打印一两行时,它可以完美运行,但是当我在两个文件中使用 os.system 执行命令时,它会崩溃。
    【解决方案3】:

    我设计的更简单的方法是创建一个同时打印到屏幕和文件的函数。当您输入输出文件名作为参数时,以下示例有效:

    OutputFile= args.Output_File
    if args.Output_File:
        OF = open(OutputFile, 'w')
    
    def printing(text):
        print text
        if args.Output_File:
            OF.write(text + "\n")
    
    #To print a line_of_text both to screen and file all you need to do is:
    printing(line_of_text)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-12-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-08
      • 1970-01-01
      • 2013-04-19
      相关资源
      最近更新 更多