Articles of 标准输出

在cpp中redirect标准输出

我几天前一直在寻找这个问题的答案,希望你们能帮助我。 (我已经search并find了一些解决scheme,但每个都有自己的问题…)。 这是事情:我正在写一个自动化的工作,它负责启动由我的同事编写的代码的外部“.exe”文件。 由于这些程序是写给客户的,所以我不能对其代码进行任何修改。 这些程序一旦启动,正在等待特定的击键,并在收到合法的击键时打印一条消息。 我的目标是:编写一个程序,执行外部程序,发送按键,并从他们的标准输出接收输出。 到目前为止,我已经能够从我的程序(使用ShellExecute)运行程序,并将某种键盘监听器(使用SendMessage)模拟到另一个程序。 我可以看到它的工作原理 – 我可以看到testing程序的控制台中的输出。 我试图在testing程序的shell中实时地获取打印的消息(并在程序终止时获取大量数据),以便在出现问题时对其进行分析。 那些我试过的: 使用内联输出redirect将外部batch file写入文本文件。 使用freopen。 在执行“ShellExecute”的同时redirect输出。

禁用缓冲redirect标准输出pipe道(Win32 API,C ++)

我使用CreateProcess从Win32生成一个进程,将STARTUPINFO的hStdOutput和hStdError属性设置为用CreatePipe创build的pipe道句柄。 我有两个线程读取pipe道,等待数据变为可用(或者进程完成,在此之前它检查在终止线程之前没有剩下数据)。 随着数据变得可用,我将输出写入一个有效的大文本框。 发生什么事是输出被缓冲,所以一个缓慢运行的过程只是获取文本框中的大块数据,而不是“正好发生”。 我不确定是否是进行缓冲的pipe道,或者与redirect有关。 有什么办法可以将pipe道设置为无缓冲的,或者以尽可能快的方式发送标准输出来启动进程? 我正在testing一个testing应用程序,相隔一秒打印行 Here is line one (waits one second) Here is line two (waits one second) … etc

强制另一个程序的标准输出使用Python无缓冲

python脚本正在控制Linux上的外部应用程序,通过pipe道将input传递到外部应用程序stdin,并通过pipe道从外部应用程序stdout读取输出。 问题在于对pipe道的写入是通过块进行缓冲的,而不是通过线路进行缓冲,因此在控制脚本接收到外部应用程序中的printf输出数据之前发生延迟。 外部应用程序不能被改变来添加显式的fflush(0)调用。 Python标准库的pty模块如何与子stream程模块一起使用来实现这一目标?

freopen标准输出和控制台

鉴于以下function: freopen("file.txt","w",stdout); 将stdoutredirect到一个文件中,我如何使stdoutredirect到控制台? 我会注意到,是的,还有类似的其他问题, 但他们是关于Linux / POSIX。 我正在使用Windows。 你不能分配给标准输出,这将依赖于它的一组解决scheme无效。 dup和dup2()不是原生的窗口,取消其他集合。 如上所述,posix函数不适用(除非你计算fdopen())。

是否有附加到标准输出的缓冲区大小?

我试图find一些有关Windows上stdout的数据限制的信息。 我似乎无法findMSDN上的信息。 有多less数据可以写入标准输出有限制? 如果是这样,如果达到限制,会发生什么? 数据丢失了吗? 如果stdout被redirect(例如,通过从.Net启动进程并使用ProcessStartInfo.RedirectStandardOutput属性),那么对于可以写入多less数据有什么影响? 当我从调用过程的stdoutstream中读取时,是否会影响限制? 这些限制是否与命名pipe道有关?

用超时和捕捉输出叉subprocess

说我有一个像下面的函数,我如何捕获Process.spawn调用的输出? 如果超过指定的超时时间,我也应该能够终止进程。 请注意,该function也必须是跨平台的(Windows / Linux)。 def execute_with_timeout!(command) begin pid = Process.spawn(command) # How do I capture output of this process? status = Timeout::timeout(5) { Process.wait(pid) } rescue Timeout::Error Process.kill('KILL', pid) end end 谢谢。

用Python 3打印LF到stdout

如何得到\n打印到Windows上的标准输出? 此代码在Python 2中工作,但不在Python 3中工作: # set sys.stdout to binary mode on Windows import sys, os, msvcrt msvcrt.setmode(sys.stdout.fileno(), os.O_BINARY) # the length of testfile created with # python test_py3k_lf_print.py > testfile # below should be exactly 4 symbols (23 0A 23 0A) print("#\n#")

用Windowsbatch file在文本文件中添加新行

我有一个文本文件,其中有超过200行,我只是想在第4行之前添加一个新行。我正在使用Windows XP。 input前的示例文本文件: header 1 header 2 header 3 details 1 details 2 输出后: header 1 header 2 header 3 <—– This is new line —-> details 1 details 2

Windows控制台程序stdout在使用pipe道redirect时被缓冲

我有一个长期运行的服务器程序(比如程序A),它是用QT / c ++编写的。 该程序是不是很稳定,所以我决定写一个python脚本来重新启动它,如果它崩溃。 问题是程序可能开始失败(如果我给它一个使用中的端口),打印错误,然后挂在那里没有退出,所以我必须监视程序的标准输出,并在失败的启动时杀死它。 这是我的最终代码(呃,其实这是好的,你可以忽略它): self.subp = subprocess.Popen( r'.\A.exe -server %d' % portnum, stdout=subprocess.PIPE, bufsize=1) for line in iter(self.subp.stdout.readline, ''): print(line, end='') 但我发现我不能从subprocess的标准输出读取任何东西,readline方法只是阻止那里,如果我杀了一个进程,python脚本只是退出没有任何输出。 在一开始,我认为这是一个subprocess模块的问题,但经过一些testing,我发现它不是。 如果我用一些其他的Windows控制台程序replaceA.exe命令行,ping -t例如,一切工作正常。 所以我认为这可能是A程序的问题。 幸运的是,我有A的源代码,这里是一个输出处理: printf("Server is starting on port %u\n", Config.ServerPort); if(server->listen()) printf("Starting successfully\n"); else printf("Starting failed!\n"); 经过一些search,我添加fflush(stdout); 到这段代码的末尾,重build程序,现在它工作 所以我的问题是,我还是不明白,原来的A程序代码有什么问题? 不用强制刷新,它可以在程序启动后立即在Windows控制台中正确打印这些string。 为什么在输出上使用pipe道时输出缓冲? 我在标准c实现读取,输出将自动刷新换行,但为什么不在我的情况? 这是一个Windows的问题,或编译器的问题? A程序是用QT / C ++编译的,QT版本是4.7.4(x32),C ++编译器是用QT(GCC […]