Bu garip ses başlığı başlığı için özür dileriz ...Akışa "enter tuşuna bas" nasıl yazılır?
Aşağıdaki durumum var: Java programımın harici bir konsolla etkileşim kurmasını istiyorum. Bireysel komutları bu konsola "göndermek" için, normal bir konsoldaki "tuşa basılan tuş" neyin benzerini taklit etmem gerekiyor. Ne istediğimi açıklığa kavuşturmak için, mysql'in başka bir API'si olmadığını ve konsol aracılığıyla etkileşimde bulunmam gerektiğini düşünün. Bu benim asıl sorunum olmasa da, yeterince yakın.
Aşağıdaki kod var: out.close()
çağrısı çalıştırılırsa
String command = "/usr/local/mysql/bin/mysql";
Process child = Runtime.getRuntime().exec(command);
StreamGobbler gobbler = new StreamGobbler(child.getInputStream());
gobbler.start();
BufferedWriter out = new BufferedWriter(new OutputStreamWriter(child.getOutputStream()));
out.write("help");
// here enter key needs to be pressed
out.flush();
// out.close();
, her şey yolunda. Ama elbette, bu şekilde sadece tek bir komut gönderebilirim, istediğim bu değil. Ancak out.close()
ihmal edilirse, diğer program komutu asla çalıştırmaz. Benim tahminim hala normal bir konsolda enter tuşuna basarak yapılacak olan "bitir" komutunu beklemesidir. out.write(System.getProperty("line.separator"));
ve out.newLine();
(aynıdır) sorunu çözmez, out.write("\r\n");
ve out.write((char) 26);
(EOF). Tabii ki, bu tamamen yanlış yapıyorum (yani yanlış yaklaşım) olabilir. Sonra doğru yönde bir işaretçi için minnettarım ...
Bu konuda herhangi bir yardım çok takdir.
Standart çıkış ** ve ** standart hata çıkışı akışlarını tüketiyor olmalısınız. Bu akışlarda ne alıyorsunuz? –
Hangi sistemdesiniz? Unix yollarını kullanıyorsunuz, ancak Windows EOF'u (Ctrl-Z = 26) denediniz mi? Unix EOF, Ctrl-D'dir (= 4), fakat kesinlikle gönderilmesi gereken doğru şey değildir. –
@Mark Peters: Maalesef hata çıkış akışı için bir gobbler eklemeliydim, ancak out.close() işlevi işaret edildiği gibi yürütüldüğü sürece her iki akış da hiçbir şey almamalı. @Sergey Tachenov: Bir Mac üzerinde çalışıyorum ve Ctrl-D de çalışmadı, ama bunun için teşekkürler. – roesslerj