2010-07-24 1 views
1

У меня есть кусок кода, который вызывает экземпляр Баш терминала посредством использования следующих -Java.lang.Runtime

proc = Runtime.getRuntime().exec("/bin/bash", null, working-dir); 

, а затем для запуска команды Unix на этом вызывается экземпляр Баш I использую объект PrintWriter, как это -

PrintWriter out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(proc.getOutputStream())), true); 

Я тогда с помощью объекта PrintWriter на самом деле выполнить команды в следующем fashion--

out.println("pwd"); 
out.println("ls >a.txt"); 

Хотя обе команды работают отлично, у меня есть проблема в том случае, когда я создаю команду, основанную на некотором пользовательском вводе. Будучи конкретным, я строить команду, чтобы отправить несколько файлов на принтер в сети, и я делаю это так -

while ((strLine = br.readLine()) != null) { 
cmd= blah +blah +blah;//Construction of the command 
out.println(cmd); 
} 

Что на самом деле происходит в приведенном выше фрагменте кода является то, что Вг чтение из файла, который содержит все файлы, которые необходимо распечатать, а затем строка, содержащая имя файла, входит в команду, и я пишу ее на объект PrintWriter.

проблема заключается в том, что я предполагаю, что происходит какая-то очередность, и объект PrintWriter фактически не передает команду вызванному экземпляру bash каждый раз, когда создается команда. Итак, в конце дня, если есть 40 команд, которые строятся, печатается только около 16-18 документов. Я думаю, это потому, что он отправляет все команды на принтер за один раз, в результате чего теряется. Я хочу устранить эту потерю.

Любые указатели ??

Благодаря P1nG

+0

зависит от того, выполняется ли пользователь sudo или нет. – ping

ответ

1

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

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

Смежные вопросы