所以我知道如何执行python脚本并使用os.command甚至子进程在命令窗口输出。另外我知道将输出捕获到文本文件是通过os.command完成的('我的命令> me.txt"。
我的问题是: 有没有办法用一个命令做两个?即执行python脚本,将输出捕获到文本文件并将其显示在命令窗口中?
如果不可能,这是另一个问题: 我想要执行的命令最多需要8分钟才能完成,并在文本文件中写入最多300行。我可以在命令仍在执行时访问文本文件,以便在不等待命令完成执行的情况下获取某些数据吗?比如每隔1分钟访问一次文本文件?
如果两者都不可能,那么这也可以完成这项工作: 当我的命令成功执行时,它会在cmd以及许多其他行上打印出Done语句。我是否可以检查cmd中的那个"完成"字符串是打印出来的还是需要在文本文件中捕获才能实现该dearch?
答案 0 :(得分:1)
在回显stdout时保存命令输出的最简单方法是使用tee
:
$ python script.py | tee logfile.log
如果要在编写文件时按照文件的输出使用tail
:
$ tail -f logfile
您可能需要立即unbuffer
或flush
输出,以便在填满整行或缓冲区之前读取输出:
$ 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)