在python中调用bash命令时定期将输出保存到文件 我目前正在调用一个外部C++程序,它使用SubPurtual.CuffTyOutlook生成大量输出,并将STDUT保存到日志文件中。但是C++程序可能需要很长的时间才能完成,但是我想在它完成之前查看它,就像我直接通过BASH命令行执行C++程序一样。p> 当然,我可以通过直接使用FStFAM来修改C++程序来节省输出。但是我想知道python中是否有任何解决方案可以拦截stdout
提前谢谢你 如果将输出保存到日志文件中,为什么不使用在python中调用bash命令时定期将输出保存到文件 我目前正在调用一个外部C++程序,它使用SubPurtual.CuffTyOutlook生成大量输出,并将STDUT保存到日志文件中。但是C++程序可能需要很长的时间才能完成,但是我想在它完成之前查看它,就像我直接通过BASH命令行执行C++程序一样。p> 当然,我可以通过直接使用FStFAM来修改C++程序来节省输出。但是我想知道python中是否有任何解决方案可以拦截stdout,python,bash,subprocess,stdout,Python,Bash,Subprocess,Stdout,提前谢谢你 如果将输出保存到日志文件中,为什么不使用子流程调用,并将标准输出设置为打开的日志文件 with open("logfile") as logfile: subprocess.call("run_my_program arg1 arg2", shell=True, stdout=logfile) 那么一个简单的尾-f日志文件将在程序执行过程中显示日志的内容。您知道 TE/命令吗?@ Hivit当然可以在调用C++程序的命令中添加“TEE”。但我的问题是如何在Python中实现这一
子流程调用,并将标准输出设置为打开的日志文件
with open("logfile") as logfile:
subprocess.call("run_my_program arg1 arg2", shell=True, stdout=logfile)
那么一个简单的<代码>尾-f日志文件将在程序执行过程中显示日志的内容。
您知道<代码> TE/<代码>命令吗?@ Hivit当然可以在调用C++程序的命令中添加“TEE”。但我的问题是如何在Python中实现这一点@弗罗登回答了这个问题。原来我是如此习惯于使用子流程。当我来处理输出时,检查输出,但完全不知道子流程的stdout=logfile
。调用。谢谢@Frodon!不知道stdout
在子流程中内部使用。请检查输出,但不要检查其他。stdout=logfile
的+1。注意:如果STDUT不是TTY,则C++可能使用块缓冲而不是行缓冲,即输出不会在“实时”()中。不要不必要地使用shell=True
,请改用list参数:[“我的程序”、“arg 1”、“arg 2”]
。以二进制模式(“WB”)打开文件,用于C++。仅供参考,我还发现Daniel Gallagher的评论非常清楚地解释了这一点。如果stdout是tty,\n
将刷新输出缓冲区,否则不会,而std::endl
将始终刷新输出缓冲区。std::endl
和\n
之间的区别可以用以下公式很好地解释。