プログラムをテストしている間、処理のために文字列をstdinに送ることができればいいです(VSCode 1.15.0-insider/Linux Mint 18.2のlibvala-0.36)。以下は説明のためのものですが、stdin.puts/stdin.flushは機能していないようです。キーストローク/ストリングをスタンダードにポンピングするにはどうすればよいですか?stdinに文字列/コマンドを送る方法
private void test_func(){
...do stuff
stdin.puts("""{"event":"server.connected","params":{"version":"0.0.1","pid":0}}""");
...do stuff
stdin.puts("exit\r\n");
}
public static int main (string[] args) {
string line;
...do stuff
#if DEBUG
test_func();
#endif
while ((line = stdin.read_line()) != null) {
line = line.strip();
if (line.length > 0) {
if (line == "exit") break;
gJsonRPC.handle_request (line);
}
}
...do stuff
}
更新: はとても一時的にこの方法に落ち着いた、GLibの中でネットに似た機能 "のSendKeys" クラスを見つけることができます....
public static void SendKeys(string sKeys) {
//--------------------------------------------------------------
//OSS:Hack:SendKeys
//--------------------------------------------------------------
char[] _keys = sKeys.to_utf8();
for (int i = _keys.length; i >= 0; i--)
stdin.ungetc (_keys[i]);
//--------------------------------------------------------------
}
@LasallはFileStream.open(¨を提案/ dev /stdin¨、¨w¨)ので、次に試してみます。
ありがとう、ジェンス、私はすでに別々の単体テストを持っています。上のコードは、単にstdinの問題のSOの図を提供することでした。どのように私はstdinに文字列をポンプすることができます任意のアイデア?上記の私のstdin.putsは動作していないようです。 –
@ George:stdinは読み取り専用です。 FileStream.open(¨/ dev /stdin¨、¨w¨)を使用して、stdoutに直接書き込むことも、手動で開くこともできます。ただし、read_lineで読み取るまでは、変更内容がバッファに格納されない可能性があるため、同期の問題が発生します。 – Lasall
私は最初の場所で試してみませんが、stdinが本当に標準入力であるかどうかわからないワームの缶が開きます。代わりにあなたのメソッドをメインプログラムとは別にテストするか、プログラムに "偽の"入力を実際に実行する必要がある場合は、 './myprog