Spec-Zone .ru
спецификации, руководства, описания, API
|
public final class ProcessBuilder extends Object
Каждый ProcessBuilder
экземпляр управляет набором атрибутов процесса. start()
метод создает новое Process
экземпляр с теми атрибутами. start()
метод может неоднократно вызываться от того же самого экземпляра, чтобы создать новые подпроцессы с идентичными или связанными атрибутами.
Каждый разработчик процесса управляет этими атрибутами процесса:
System.getenv()
). user.dir
. Process.getOutputStream()
. Однако, стандартный ввод может быть перенаправлен к другому исходному использованию redirectInput
. В этом случае, Process.getOutputStream()
возвратит нулевой поток вывода, для который:
Process.getInputStream()
и Process.getErrorStream()
. Однако, стандартный вывод и стандартная ошибка могут быть перенаправлены другим местам назначения, использующим redirectOutput
и redirectError
. В этом случае, Process.getInputStream()
и/или Process.getErrorStream()
возвратит нулевой входной поток, для который:
false
, подразумевать, что стандартный вывод и вывод ошибок подпроцесса отправляются двум отдельным потокам, к которым можно получить доступ, используя Process.getInputStream()
и Process.getErrorStream()
методы. Если значение устанавливается в true
, тогда:
redirectOutput
redirectError
метод игнорируется, создавая подпроцесс Process.getErrorStream()
всегда будет нулевой входной поток
Изменяя процесс атрибуты разработчика будут влиять на процессы, впоследствии запущенные тем объектом start()
метод, но никогда не будет влиять на ранее запущенные процессы или процесс Java непосредственно.
Большинство проверки на ошибки выполняется start()
метод. Возможно изменить состояние объекта так, чтобы start()
перестанет работать. Например, установка атрибута команды к пустому списку не будет выдавать исключение если start()
вызывается.
Отметьте, что этот класс не синхронизируется. Если многократный доступ потоков a ProcessBuilder
экземпляр одновременно, и по крайней мере один из потоков изменяют один из атрибутов структурно, это должно синхронизироваться внешне.
Запуск нового процесса, который использует значение по умолчанию, рабочий каталог и среда легки:
Process p = new ProcessBuilder("myCommand", "myArg").start();
Вот пример, который запускает процесс с измененного рабочего каталога и среды, и перенаправляет стандартный вывод и ошибку, которая будет добавлена к файлу журнала:
ProcessBuilder pb =
new ProcessBuilder("myCommand", "myArg1", "myArg2");
Map<String, String> env = pb.environment();
env.put("VAR1", "myValue");
env.remove("OTHERVAR");
env.put("VAR2", env.get("VAR1") + "suffix");
pb.directory(new File("myDir"));
File log = new File("log");
pb.redirectErrorStream(true);
pb.redirectOutput(Redirect.appendTo(log));
Process p = pb.start();
assert pb.redirectInput() == Redirect.PIPE;
assert pb.redirectOutput().file() == log;
assert p.getInputStream().read() == -1;
Чтобы запустить процесс с явного набора переменных окружения, сначала вызовите Map.clear()
прежде, чем добавить переменные окружения.
Модификатор и Тип | Класс и Описание |
---|---|
static class |
ProcessBuilder. Перенаправление
Представляет источник ввода подпроцесса или место назначения вывода подпроцесса.
|
Конструктор и Описание |
---|
ProcessBuilder(List<String> command)
Создает разработчика процесса с указанной программой операционной системы и параметрами.
|
ProcessBuilder(String... command)
Создает разработчика процесса с указанной программой операционной системы и параметрами.
|
Модификатор и Тип | Метод и Описание |
---|---|
List<String> |
command()
Возвраты эта программа операционной системы разработчика процесса и параметры.
|
ProcessBuilder |
command(List<String> command)
Наборы эта программа операционной системы разработчика процесса и параметры.
|
ProcessBuilder |
command(String... command)
Наборы эта программа операционной системы разработчика процесса и параметры.
|
Файл |
directory()
Возвраты рабочий каталог разработчика этого процесса.
|
ProcessBuilder |
directory(File directory)
Наборы рабочий каталог разработчика этого процесса.
|
Map<String,String> |
environment()
Возвращает строковое представление карты этой среды разработчика процесса.
|
ProcessBuilder |
inheritIO()
Устанавливает источник и место назначения для ввода-вывода стандарта подпроцесса, чтобы быть тем же самым как таковыми из текущего процесса Java.
|
ProcessBuilder. Перенаправление |
redirectError()
Возвраты стандартное ошибочное место назначения разработчика этого процесса.
|
ProcessBuilder |
redirectError(File file)
Наборы стандартное ошибочное место назначения разработчика этого процесса к файлу.
|
ProcessBuilder |
redirectError(ProcessBuilder.Redirect destination)
Наборы стандартное ошибочное место назначения разработчика этого процесса.
|
boolean |
redirectErrorStream()
Говорит, объединяет ли этот разработчик процесса стандартную ошибку и стандартный вывод.
|
ProcessBuilder |
redirectErrorStream(boolean redirectErrorStream)
Наборы этот разработчик процесса
redirectErrorStream свойство. |
ProcessBuilder. Перенаправление |
redirectInput()
Возвраты этот входной источник стандарта разработчика процесса.
|
ProcessBuilder |
redirectInput(File file)
Наборы этот входной источник стандарта разработчика процесса к файлу.
|
ProcessBuilder |
redirectInput(ProcessBuilder.Redirect source)
Наборы этот входной источник стандарта разработчика процесса.
|
ProcessBuilder. Перенаправление |
redirectOutput()
Возвраты это место назначения стандартного вывода разработчика процесса.
|
ProcessBuilder |
redirectOutput(File file)
Наборы это место назначения стандартного вывода разработчика процесса к файлу.
|
ProcessBuilder |
redirectOutput(ProcessBuilder.Redirect destination)
Наборы это место назначения стандартного вывода разработчика процесса.
|
Процесс |
start()
Запускает новый процесс, используя атрибуты этого разработчика процесса.
|
public ProcessBuilder(List<String> command)
command
список. Последующие обновления к списку будут отражены в состоянии разработчика процесса. Это не проверяется ли command
соответствует допустимой команде операционной системы.command
- список, содержащий программу и ее параметрыNullPointerException
- если параметром является нульpublic ProcessBuilder(String... command)
command
массив, в том же самом порядке. Это не проверяется ли command
соответствует допустимой команде операционной системы.command
- строковый массив, содержащий программу и ее параметрыpublic ProcessBuilder command(List<String> command)
command
список. Последующие обновления к списку будут отражены в состоянии разработчика процесса. Это не проверяется ли command
соответствует допустимой команде операционной системы.command
- список, содержащий программу и ее параметрыNullPointerException
- если параметром является нульpublic ProcessBuilder command(String... command)
command
массив, в том же самом порядке. Это не проверяется ли command
соответствует допустимой команде операционной системы.command
- строковый массив, содержащий программу и ее параметрыpublic List<String> command()
public Map<String,String> environment()
System.getenv()
). Подпроцессы впоследствии запускались этим объектом start()
метод будет использовать эту карту в качестве их среды. Возвращенный объект может быть изменен, используя обычный Map
операции. Эти модификации будут видимы к подпроцессам, запущенным через start()
метод. Два ProcessBuilder
экземпляры всегда содержат независимые среды процесса, так изменения к возвращенной карте никогда не будут отражаться ни в каком другом ProcessBuilder
экземпляр или значения, возвращенные System.getenv
.
Если система не поддерживает переменные окружения, пустая карта возвращается.
Возвращенная карта не разрешает нулевые ключи или значения. Попытка вставить или запросить присутствие нулевого ключа или значения бросит a NullPointerException
. Попытка запросить присутствие ключа или значения, которое не имеет типа String
бросит a ClassCastException
.
Поведение возвращенной карты системно-зависимо. Система, возможно, не позволяет модификации переменным окружения или может запретить определенные имена переменной или значения. Поэтому попытки изменить карту могут перестать работать с UnsupportedOperationException
или IllegalArgumentException
если модификация не разрешается операционной системой.
Так как внешний формат имен переменной окружения и значений системно-зависим, возможно, нет непосредственного отображения между ними и строками Unicode Java. Однако, карта реализуется таким способом, которым у переменных окружения, которые не изменяются кодом Java, будет неизмененное собственное представление в подпроцессе.
Возвращенная карта и ее представления набора, возможно, не повинуются общему контракту Object.equals(java.lang.Object)
и Object.hashCode()
методы.
Возвращенная карта является обычно чувствительной к регистру на всех платформах.
Если менеджер безопасности существует, checkPermission
метод вызывают с a RuntimePermission
("getenv.*")
разрешение. Это может привести к a SecurityException
быть брошенным.
Передавая информацию к подпроцессу Java, системные свойства обычно предпочитаются по переменным окружения.
SecurityException
- если менеджер безопасности существует и checkPermission
метод не предоставляет доступ к среде процессаRuntime.exec(String[],String[],java.io.File)
, System.getenv()
public File directory()
start()
метод будет использовать это в качестве их рабочего каталога. Возвращенное значение может быть null
- это означает использовать рабочий каталог текущего процесса Java, обычно каталог, названный системным свойством user.dir
, как рабочий каталог дочернего процесса.public ProcessBuilder directory(File directory)
start()
метод будет использовать это в качестве их рабочего каталога. Параметр может быть null
- это означает использовать рабочий каталог текущего процесса Java, обычно каталог, названный системным свойством user.dir
, как рабочий каталог дочернего процесса.directory
- новый рабочий каталогpublic ProcessBuilder redirectInput(ProcessBuilder.Redirect source)
start()
метод получает их стандартный ввод из этого источника. Если источник Redirect.PIPE
(начальное значение), тогда стандартный ввод подпроцесса может быть записан использованию потока вывода, возвращенного Process.getOutputStream()
. Если источник устанавливается в любое другое значение, то Process.getOutputStream()
возвратит нулевой поток вывода.
source
- новый стандартный входной источникIllegalArgumentException
- если перенаправление не соответствует допустимому источнику данных, то есть, имеет тип WRITE
или APPEND
public ProcessBuilder redirectOutput(ProcessBuilder.Redirect destination)
start()
метод отправляет их стандартный вывод этому месту назначения. Если место назначения Redirect.PIPE
(начальное значение), тогда стандартный вывод подпроцесса может быть считан, используя входной поток, возвращенный Process.getInputStream()
. Если место назначения устанавливается в любое другое значение, то Process.getInputStream()
возвратит нулевой входной поток.
destination
- новое место назначения стандартного выводаIllegalArgumentException
- если перенаправление не соответствует допустимому месту назначения данных, то есть, имеет тип READ
public ProcessBuilder redirectError(ProcessBuilder.Redirect destination)
start()
метод отправляет их стандартную ошибку этому месту назначения. Если место назначения Redirect.PIPE
(начальное значение), тогда вывод ошибок подпроцесса может быть считан, используя входной поток, возвращенный Process.getErrorStream()
. Если место назначения устанавливается в любое другое значение, то Process.getErrorStream()
возвратит нулевой входной поток.
Если redirectErrorStream
атрибут был установлен true
, тогда перенаправление, установленное этим методом, не имеет никакого эффекта.
destination
- новое стандартное ошибочное место назначенияIllegalArgumentException
- если перенаправление не соответствует допустимому месту назначения данных, то есть, имеет тип READ
public ProcessBuilder redirectInput(File file)
Это - метод удобства. Вызов формы redirectInput(file)
ведет себя точно таким же образом как вызов redirectInput
(Redirect.from(file))
.
file
- новый стандартный входной источникpublic ProcessBuilder redirectOutput(File file)
Это - метод удобства. Вызов формы redirectOutput(file)
ведет себя точно таким же образом как вызов redirectOutput
(Redirect.to(file))
.
file
- новое место назначения стандартного выводаpublic ProcessBuilder redirectError(File file)
Это - метод удобства. Вызов формы redirectError(file)
ведет себя точно таким же образом как вызов redirectError
(Redirect.to(file))
.
file
- новое стандартное ошибочное место назначенияpublic ProcessBuilder.Redirect redirectInput()
start()
метод получает их стандартный ввод из этого источника. Начальное значение Redirect.PIPE
.public ProcessBuilder.Redirect redirectOutput()
start()
перенаправление метода их стандартный вывод этому месту назначения. Начальное значение Redirect.PIPE
.public ProcessBuilder.Redirect redirectError()
start()
перенаправление метода их стандартная ошибка этому месту назначения. Начальное значение Redirect.PIPE
.public ProcessBuilder inheritIO()
Это - метод удобства. Вызов формы
pb.inheritIO()
ведет себя точно таким же образом как вызов pb.redirectInput(Redirect.INHERIT)
.redirectOutput(Redirect.INHERIT)
.redirectError(Redirect.INHERIT)
Это дает поведение, эквивалентное большинству интерпретаторов команд операционной системы, или функции стандартной библиотеки для C system()
.public boolean redirectErrorStream()
Если это свойство true
, тогда любой вывод ошибок, сгенерированный подпроцессами впоследствии, запускался этим объектом start()
метод будет объединен со стандартным выводом, так, чтобы оба могли быть считаны, используя Process.getInputStream()
метод. Это облегчает коррелировать сообщения об ошибках с соответствующим выводом. Начальное значение false
.
redirectErrorStream
свойствоpublic ProcessBuilder redirectErrorStream(boolean redirectErrorStream)
redirectErrorStream
свойство. Если это свойство true
, тогда любой вывод ошибок, сгенерированный подпроцессами впоследствии, запускался этим объектом start()
метод будет объединен со стандартным выводом, так, чтобы оба могли быть считаны, используя Process.getInputStream()
метод. Это облегчает коррелировать сообщения об ошибках с соответствующим выводом. Начальное значение false
.
redirectErrorStream
- новое значение свойстваpublic Process start() throws IOException
Новый процесс вызовет команду и параметры, данные command()
, в рабочем каталоге как дано directory()
, со средой процесса как дано environment()
.
Этот метод проверяет, что команда является допустимой командой операционной системы. То, какие команды допустимы, системно-зависимо, но по крайней мере команда должна быть непустым списком непустых строк.
Минимальный набор системно-зависимых переменных окружения может быть обязан запускать процесс на некоторых операционных системах. В результате подпроцесс может наследовать дополнительные настройки переменной окружения вне тех в разработчике процесса environment()
.
Если есть менеджер безопасности, checkExec
метод вызывают с первым компонентом этого объекта command
выстройте как его параметр. Это может привести к a SecurityException
быть брошенным.
Запуск процесса операционной системы очень системно-зависим. Среди многих вещей, которые могут пойти не так, как надо:
В таких случаях будет выдано исключение. Точный характер исключения системно-зависим, но это всегда будет подкласс IOException
.
Последующие модификации этому разработчику процесса не будут влиять на возвращенный Process
.
Process
объект для того, чтобы управлять подпроцессомNullPointerException
- если элемент списка команд является нулемIndexOutOfBoundsException
- если команда является пустым списком (имеет размер 0
)SecurityException
- если менеджер безопасности существует и checkExec
метод не позволяет создание подпроцесса, или checkRead
метод отрицает доступ для чтения к файлу, или checkWrite
метод отрицает доступ для записи к файлу IOException
- если ошибка ввода-вывода происходитRuntime.exec(String[], String[], java.io.File)
Для дальнейшей ссылки API и документации разработчика, см.
Авторское право © 1993, 2011, Oracle и/или его филиалы. Все права защищены.