Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/333.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读取外部标准输出流_Python_C++_Windows_Pywin32 - Fatal编程技术网

从python读取外部标准输出流

从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

我希望我没有把事情搞混。我想从一个外部程序C++程序读取STDUT流,它是一个外部SDK,它目前正在将其PrtTf命令发送到Win32控制台窗口,VisualStudio是标准输出窗口。它是处于活动Win32模式的application.exe,并打开一个单独的cmd窗口以显示不在visual studio调试器中的输出

我想从外部python脚本捕获在该程序中执行的printf命令。大多数解决方案/问题都是使用Popen、subprocess或ctypes,它们只有在C/C++程序从python内部启动而不是单独启动时才起作用

我看了这个问题

monkeypatching的其中一个代码片段说这是可以做到的-

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窗口一样打开的窗口。