打印python脚本输出到BOTH文本文件和命令窗口

时间:2014-06-06 19:49:30

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

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

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

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

如果两者都不可能,那么这也可以完成这项工作: 当我的命令成功执行时,它会在cmd以及许多其他行上打印出Done语句。我是否可以检查cmd中的那个"完成"字符串是打印出来的还是需要在文本文件中捕获才能实现该dearch?

3 个答案:

答案 0 :(得分:1)

在回显stdout时保存命令输出的最简单方法是使用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)

答案 1 :(得分:0)

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

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 

答案 2 :(得分:0)

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

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)