我有一个程序等待一行标准输入,然后,在处理它(需要相当长的时间)后,会发出一个答案。程序将接受输入,直到输入流关闭。
我怎样才能从D控制该程序?换句话说,我怎么能
我尝试了以下代码,但不出意外,它等待子进程完全完成,然后一次打印输出:
module main;
import std.file;
import std.path;
import std.process;
import std.stdio;
void main(string[] args)
{
string[] inputs = ["test string 1", "test string 2"];
auto pipes = pipeProcess(buildPath(getcwd(), "LittleTextProcessingApp"), Redirect.all);
scope(exit) wait(pipes.pid);
foreach(input; inputs)
{
pipes.stdin.writeln(input);
}
pipes.stdin.close;
foreach(line; pipes.stdout.byLine)
{
writeln(line);
}
}
也就是说,它在延迟一秒后打印
以下是500毫秒前输入的:测试字符串1
以下是500毫秒前输入的:test string 2
所需的行为是打印
以下是500毫秒前输入的:测试字符串1
半秒后,第二行500毫秒后。
我作为子进程测试的程序的源代码如下:
module main;
import std.stdio;
import core.thread;
void main(string[] args)
{
foreach(input; stdin.byLine)
{
auto duration = 500.msecs;
stderr.writefln("Doing something for %s....", duration);
Thread.sleep(duration);
writefln("The following was input %s ago: %s", duration, input);
}
}
答案 0 :(得分:4)
罪魁祸首是儿童过程。
在<div style="width:100%;height:200px;background-color:yellow" onclick="alert('Div A');return false;">
This is Div A
<div style="width:20%;height:100px;background-color:red" onclick="alert('Div B');return false;">
This is Div B
</div>
</div>
之后,默认情况下不会刷新输出。
相反,它保存在一个缓冲区(几千字节长)。
这是一种常见的技术(不是特定于D),可以大大提高速度,例如,在大量的几字节块中将大文件写入HDD。
要刷新缓冲区,请在每次希望输出立即显示时使用writefln
。
在您的子示例代码中的最后一个stdout.flush()
之后添加该行可修复示例中的情况。