Java.lang.Runtime
У меня есть кусок кода, который вызывает экземпляр терминала Bash с помощью следующего:
proc = Runtime.getRuntime().exec("/bin/bash", null, working-dir);
а затем для запуска команд Unix на этом вызываемом экземпляре bash я использую объект PrintWriter, подобный этому:
PrintWriter out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(proc.getOutputStream())), true);
Затем я использую объект PrintWriter для фактического выполнения команд следующим образом:
out.println("pwd");
out.println("ls >a.txt");
Хотя обе команды, кажется, работают отлично, у меня есть проблема в случае, когда я создаю команду на основе некоторого пользовательского ввода. Конкретно, я создаю команду для отправки некоторых файлов на принтер в сети, и я делаю это так:
while ((strLine = br.readLine()) != null) {
cmd= blah +blah +blah;//Construction of the command
out.println(cmd);
}
Что на самом деле происходит в приведенном выше фрагменте кода, так это то, что br читает из файла, который содержит все файлы, которые должны быть напечатаны, а затем в команду входит строка с именем файла, и я записываю ее в объект PrintWriter.
проблема, с которой я сталкиваюсь, заключается в том, что, я думаю, что происходит какая-то очередь, и объект PrintWriter фактически не передает команду вызываемому экземпляру bash каждый раз, когда создается команда. Таким образом, в конце концов, если создается 40 команд, печатается только 16-18 документов. Я думаю, это потому, что он отправляет все команды на принтер за один раз, что приводит к потере. Я хочу устранить эту потерю.
Какие-нибудь указатели??
Спасибо p1nG
1 ответ
Попробуйте добавить out.flush() в свой цикл. Это очистит буфер в BufferedWriter, который вы создали.
Другой совет может заключаться в том, чтобы не пытаться использовать один bash exec для всех команд, а вместо этого создавать и выполнять команду по отдельности. Попробуйте использовать Process Builder вместо Runtime.exec().