Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/339.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在python中调用bash命令时定期将输出保存到文件 我目前正在调用一个外部C++程序,它使用SubPurtual.CuffTyOutlook生成大量输出,并将STDUT保存到日志文件中。但是C++程序可能需要很长的时间才能完成,但是我想在它完成之前查看它,就像我直接通过BASH命令行执行C++程序一样。p> 当然,我可以通过直接使用FStFAM来修改C++程序来节省输出。但是我想知道python中是否有任何解决方案可以拦截stdout_Python_Bash_Subprocess_Stdout - Fatal编程技术网

在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
之间的区别可以用以下公式很好地解释。