Java.lang.Runtime - PullRequest
       27

Java.lang.Runtime

1 голос
/ 24 июля 2010

У меня есть фрагмент кода, который вызывает экземпляр терминала 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 Ответ

1 голос
/ 24 июля 2010

Попробуйте добавить out.flush () в свой цикл. Это очистит буфер в созданном вами BufferedWriter.

Еще один совет - избегать попытки использовать один bash exec для всех команд, а вместо этого создавать и выполнять команду по отдельности. Попробуйте использовать Process Builder вместо Runtime.exec ().

...