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

我的问题是:

有没有办法用一个命令同时做这两个事情?即执行python脚本,将输出捕获到文本文件,并在命令窗口中显示?

如果这不可能,这是另一个问题:

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

如果两者都不可行,那么也可以完成此工作:

当我的命令成功执行时,它会在cmd以及许多其他行上打印出一条Done语句。我可以在cmd中检查是否已打印"完成"字符串,或者是否需要在文本文件中捕获该字符串才能进行破坏活动?

您是在谈论将子流程的结果同时打印到文件和stdout还是在引用python文件本身的所有输出?这是两个完全不同的问题。对于重定向所有python执行输出,请查看以下文章:stackoverflow.com/questions/14906764/

您是否尝试过此.script.py > output.txt | type output.txt?

鲍勃,我说的是将子流程的结果同时打印到文件和stdout中,而不是在打印python文件时

对不起,您的命令在我每次运行时都会崩溃。它在cmd和文本文件中打印第1 2行,然后崩溃

也许您可以用此答案中描述的类的实例替换stdout。

martineau,我遇到了与Pvel相同的问题。它在cmd上运行的前30秒运行良好,但随后崩溃给出错误,并且在txt文件中只打印数字8,我猜这是错误号。伙计们要记住,Im正在运行的命令是要执行和完成的很长的命令,因此,当应该同时在cmd和txt文件上执行该命令时,为什么它总是崩溃是有道理的(就像它在操作系统中两次调用该命令一样)行)..

好的,这种方法可能有助于解决问题:当我的命令成功执行后,它会在cmd上打印出一条Done语句,以及在它之前执行的其他许多行。我可以在cmd中检查是否已打印"完成"字符串,或者是否需要在文本文件中捕获该字符串才能进行搜索?

您也可以检查一下stackoverflow.com/questions/2996887/

wmz,您的解决方案非常有帮助。解决最初的问题并没有奏效,但是我可以使用该脚本以另一种方法实现目标

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

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

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

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

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文件中打印任何内容。 因此,当我像您的示例那样优先显示一行或两行时,它非常有效,但是当我在两个ines中都使用os.system执行命令时,它就会崩溃。