从python读取外部标准输出流
我希望我没有把事情搞混。我想从一个外部程序C++程序读取STDUT流,它是一个外部SDK,它目前正在将其PrtTf命令发送到Win32控制台窗口,VisualStudio是标准输出窗口。它是处于活动Win32模式的application.exe,并打开一个单独的cmd窗口以显示不在visual studio调试器中的输出 我想从外部python脚本捕获在该程序中执行的printf命令。大多数解决方案/问题都是使用Popen、subprocess或ctypes,它们只有在C/C++程序从python内部启动而不是单独启动时才起作用 我看了这个问题 monkeypatching的其中一个代码片段说这是可以做到的-从python读取外部标准输出流,python,c++,windows,pywin32,Python,C++,Windows,Pywin32,我希望我没有把事情搞混。我想从一个外部程序C++程序读取STDUT流,它是一个外部SDK,它目前正在将其PrtTf命令发送到Win32控制台窗口,VisualStudio是标准输出窗口。它是处于活动Win32模式的application.exe,并打开一个单独的cmd窗口以显示不在visual studio调试器中的输出 我想从外部python脚本捕获在该程序中执行的printf命令。大多数解决方案/问题都是使用Popen、subprocess或ctypes,它们只有在C/C++程序从pytho
import sys
import StringIO
s = StringIO.StringIO()
sys.stdout = s
print "hey, this isn't going to stdout at all!"
print "where is it ?"
sys.stderr.write('It actually went to a StringIO object, I will show you now:\n')
sys.stderr.write(s.getvalue())
然而,这只适用于我从python解释器执行的任何操作。据我所知,sys.stdout是特定于解释器的,每当我将sys.stdout设置为StringIO对象时,它只会将python解释器中启动的stdout重定向到StringIO对象
如何将此功能扩展到其他CMD/wind32窗口
我已经研究过从python内部启动C应用程序,并且知道如何使用该技术重定向输出。但是,我希望使用VisualStudio单独启动我的C/C++应用程序,并希望python脚本能够从中读取内容
非常感谢任何有用的指点
编辑:编辑描述以使visual studio部分更加清晰。在Linux中,这可以通过管道实现,也许您应该在windows中查找类似的内容。linux中的典型用法是'a | python r.py',其中a是可执行文件,r.py是python程序。我确实尝试过寻找windows的替代品,但没有找到。我没有在问题中提到它,因为如果我要求使用管道的替代品,它可能会引导另一个可能更好的解决方案。谢谢你的建议!除非我错了,否则管道仍然有效,因为两个应用程序都是从同一个终端启动的,即一个命令在终端的单个实例中运行两个程序,类似于我上面描述的在给定解释器中工作的monkeypatch场景。我描述的场景有点不同。问题是,恐怕没有办法告诉VisualStudio调试器使用管道输出启动进程。您可以告诉它启动cmd/c a | r.py,但是您将调试cmd而不是a。如果我的问题没有提供足够的清晰度,我很抱歉。该输出不在Visual Studio调试器中。它位于标准的活动win32应用程序中。输出像.exe cmd窗口一样打开的窗口。