Пакет | flash.desktop |
Класс | public class NativeProcess |
Наследование | NativeProcess EventDispatcher Object |
Язык версии: | ActionScript 3.0 |
Версии среды выполнения: | AIR 2 |
Класс NativeProcess и его возможности доступны только для приложений AIR, установленных с помощью собственной программы установки (то есть для приложений с профилем расширенного рабочего стола). В ходе отладки можно передать аргумент -profile extendedDesktop
в ADL, чтобы обеспечить возможность выполнения процессов NativeProcess. В среде выполнения можно проверить свойство NativeProcess.isSupported
, чтобы определить, поддерживается ли связь с собственными процессами.
Поддержка в профилях AIR: эта функция поддерживается в приложениях, которые разворачиваются в компьютерных операционных системах с помощью собственных программ установки. Функция не поддерживается на мобильных устройствах или на устройствах AIR for TV. Используйте свойство NativeProcess.isSupported
, чтобы проверить наличие поддержки в среде выполнения. Дополнительные сведения о поддержке API-интерфейса в разных профилях см. в разделе «Поддержка в профилях AIR».
Приложения AIR, устанавливаемые с помощью собственной программы установки (то есть приложения с профилем расширенного рабочего стола), также используют для запуска File.openWithDefaultApplication
. Однако класс NativeProcess обеспечивает прямой доступ к стандартным потокам ввода, вывода и ошибок.
Примечание. В приложениях AIR for TV, в которых используется профиль extendedTV
, можно использовать собственные расширения для выполнения собственных процессов. Мобильные устройства так же могут использовать собственные расширения.
Связанные элементы API
Свойство | Определено | ||
---|---|---|---|
constructor : Object
Ссылка на объект класса или функцию конструктора для данного экземпляра объекта. | Object | ||
isSupported : Boolean [статические] [только для чтения]
Указывает, поддерживает ли текущий профиль выполнение собственных процессов. | NativeProcess | ||
running : Boolean [только для чтения]
Указывает, выполняется ли этот собственный процесс в настоящее время. | NativeProcess | ||
standardError : IDataInput [только для чтения]
Обеспечивает доступ к стандартному выводу ошибок из этого собственного процесса. | NativeProcess | ||
standardInput : IDataOutput [только для чтения]
Обеспечивает доступ к стандартному вводу этого собственного процесса. | NativeProcess | ||
standardOutput : IDataInput [только для чтения]
Обеспечивает доступ к стандартному потоку вывода этого собственного процесса. | NativeProcess |
Метод | Определено | ||
---|---|---|---|
Создает неинициализированный объект NativeProcess. | NativeProcess | ||
addEventListener(type:String, listener:Function, useCapture:Boolean = false, priority:int = 0, useWeakReference:Boolean = false):void
Регистрирует объект прослушивателя события на объекте EventDispatcher для получения прослушивателем уведомления о событии. | EventDispatcher | ||
Закрывает поток ввода этого процесса. | NativeProcess | ||
Посылает событие в поток событий. | EventDispatcher | ||
Попытка завершить собственный процесс. | NativeProcess | ||
Проверяет, имеет ли объект EventDispatcher прослушиватели, зарегистрированные для определенного типа события. | EventDispatcher | ||
Показывает, определено ли заданное свойство для объекта. | Object | ||
Показывает, есть ли экземпляр класса Object в цепи прототипов объекта, заданного в качестве параметра. | Object | ||
Показывает наличие заданного свойства и его перечисляемость. | Object | ||
Удаляет прослушиватель из объекта EventDispatcher. | EventDispatcher | ||
Задает доступность динамического свойства для операций цикла. | Object | ||
Запускает собственный процесс, указанный в предоставленных данных о запуске. | NativeProcess | ||
Возвращает строковое представление этого объекта, отформатированного в соответствии со стандартами, принятыми для данной локали. | Object | ||
Возвращает строковое представление заданного объекта. | Object | ||
Возвращает элементарное значение заданного объекта. | Object | ||
Проверяет, зарегистрирован ли прослушиватель события для указанного типа события с данным объектом EventDispatcher или любым его предшественником. | EventDispatcher |
Событие | Сводка | Определено | ||
---|---|---|---|---|
[многоадресное событие] Отправляется, когда проигрыватель Flash Player или приложение AIR перемещается в фокус операционной системы и становится активным. | EventDispatcher | |||
[многоадресное событие] Отправляется, когда проигрыватель Flash Player или приложение AIR теряет фокус системы и становится неактивным. | EventDispatcher | |||
Сообщает о завершении работы собственного процесса. | NativeProcess | |||
Сообщает о том, что объект NativeProcess закрыл свой поток ошибок. | NativeProcess | |||
Сообщает о том, что собственный процесс содержит данные, доступные для чтения, в стандартном потоке ошибок (stderror). | NativeProcess | |||
Сообщает о том, что не удалось прочитать данные из стандартного потока ошибок (stderror). | NativeProcess | |||
Сообщает о том, что объект NativeProcess закрыл свой поток ввода с помощью метода closeInput(). | NativeProcess | |||
Сообщает о том, что запись в стандартный поток ввода (stdin) не удалась. | NativeProcess | |||
Сообщает о том, что объект NativeProcess записал данные в поток ввода для дочернего процесса. | NativeProcess | |||
Сообщает о том, что объект NativeProcess закрыл свой поток вывода. | NativeProcess | |||
Сообщает о том, что у собственного процесса есть доступные для чтения данные в потоке вывода. | NativeProcess | |||
Сообщает о том, что чтение из потока stdout завершилось ошибкой. | NativeProcess |
isSupported | свойство |
isSupported:Boolean
[только для чтения] Язык версии: | ActionScript 3.0 |
Версии среды выполнения: | AIR 2 |
Указывает, поддерживает ли текущий профиль выполнение собственных процессов. Это свойство возвращает значение true
только при выполнении в профиле extendedDesktop. Кроме того, значением NativeProcess.isSupported
всегда является false
для программ, установленных в качестве файла AIR. Для использования класса NativeProcess необходимо упаковать программу AIR с использование флага ADT -target native
.
Реализация
public static function get isSupported():Boolean
running | свойство |
running:Boolean
[только для чтения] Язык версии: | ActionScript 3.0 |
Версии среды выполнения: | AIR 2 |
Указывает, выполняется ли этот собственный процесс в настоящее время. Процесс выполняется, если был вызван метод start()
и объект NativeProcess еще не отправил события exit
. Экземпляр NativeProcess соответствует одному процессу в операционной системе. Это свойство сохраняет значение true
, пока выполняется основной процесс операционной системы (с момента запуска собственного процесса и до возвращения процессом кода выхода операционной системе).
Реализация
public function get running():Boolean
standardError | свойство |
standardError:IDataInput
[только для чтения] Язык версии: | ActionScript 3.0 |
Версии среды выполнения: | AIR 2 |
Обеспечивает доступ к стандартному выводу ошибок из этого собственного процесса. По мере того как через этот поток поступают данные, объект NativeProcess отправляет объект события ProgressEvent. При попытке прочитать данные этого потока, когда они еще не доступны, объект NativeProcess выдает исключение EOFError.
Применяется тип IDataInput, так как с точки зрения текущего процесса выполняется ввод данных, несмотря на то что для этого используется поток вывода дочернего процесса.
Реализация
public function get standardError():IDataInput
Выдает
EOFError — если данные отсутствуют и предпринята операция чтения.
|
Связанные элементы API
standardInput | свойство |
standardInput:IDataOutput
[только для чтения] Язык версии: | ActionScript 3.0 |
Версии среды выполнения: | AIR 2 |
Обеспечивает доступ к стандартному вводу этого собственного процесса. Этот канал используется для отправки данных этому процессу. Каждый раз при записи данных в свойство input
они при первой возможности записываются в поток ввода собственного процесса.
Применяется тип IDataOutput, потому что с точки зрения текущего процесса выполняется вывод данных, несмотря на то что для этого используется поток ввода дочернего процесса.
Реализация
public function get standardInput():IDataOutput
Выдает
IllegalOperationError — при записи этого значения, когда running возвращает значение false , или при попытке записать данные в закрытый поток ввода.
|
Связанные элементы API
standardOutput | свойство |
standardOutput:IDataInput
[только для чтения] Язык версии: | ActionScript 3.0 |
Версии среды выполнения: | AIR 2 |
Обеспечивает доступ к стандартному потоку вывода этого собственного процесса. Этот поток служит для чтения данных из стандартного потока вывода собственного процесса. Когда в этом потоке есть данные, объект NativeProcess отправляет объект события ProgressEvent. При попытке прочитать данные этого потока, когда они еще не доступны, объект NativeProcess выдает исключение EOFError.
Применяется тип IDataInput, потому что с точки зрения текущего процесса выполняется ввод данных, несмотря на то что для этого используется поток вывода дочернего процесса.
Реализация
public function get standardOutput():IDataInput
Выдает
EOFError — если данные отсутствуют и предпринята операция чтения.
|
Связанные элементы API
NativeProcess | () | Конструктор |
public function NativeProcess()
Язык версии: | ActionScript 3.0 |
Версии среды выполнения: | AIR 2 |
Создает неинициализированный объект NativeProcess. Чтобы запустить процесс, необходимо вызвать метод start()
.
Связанные элементы API
closeInput | () | метод |
public function closeInput():void
Язык версии: | ActionScript 3.0 |
Версии среды выполнения: | AIR 2 |
Закрывает поток ввода этого процесса. Некоторые программы командной строки ожидают закрытия потока ввода для запуска других операций. Закрытый поток нельзя открыть снова, пока процесс не завершит работу и будет запущен снова.
События
ioErrorStandardInput: — Существует проблема, связанная с закрытием потока ввода данного процесса.
| |
standardInputClose: — Поток ввода закрыт.
|
exit | () | метод |
public function exit(force:Boolean = false):void
Язык версии: | ActionScript 3.0 |
Версии среды выполнения: | AIR 2 |
Попытка завершить собственный процесс.
Параметры
force:Boolean (default = false ) — Должна ли программа при необходимости пытаться принудительно завершить собственный процесс.
Если параметр Если параметр Если объект NativeProcess успешно завершит работу, он отправляет событие |
start | () | метод |
public function start(info:NativeProcessStartupInfo):void
Язык версии: | ActionScript 3.0 |
Версии среды выполнения: | AIR 2 |
Запускает собственный процесс, указанный в предоставленных данных о запуске. После запуска процесса открываются все потоки ввода и вывода. Этот метод возвращает результат сразу после того, как операционной системе отправляется запрос на запуск указанного процесса. Объект NativeProcess выдает исключение IllegalOperationError
, если в данное время выполняется процесс. Процесс выполняется, если свойство running
объекта NativeProcess имеет значение true
. Если операционная система не может запустить процесс, отправляется исключение Error
.
Экземпляр NativeProcess соответствует одному процессу в операционной системе. Если требуется одновременно выполнить несколько экземпляров одного процесса операционной системы, можно создать по одному экземпляру NativeProcess для каждого дочернего процесса.
Этот метод можно вызывать каждый раз, когда свойство running
объекта NativeProcess возвращает значение false
. Это означает, что объект NativeObject можно использовать повторно. Другими словами, можно создать экземпляр NativeProcess, вызвать метод start()
, дождаться события exit
, а затем вызвать метод start()
еще раз. Можно использовать другой объект NativeProcessStartupInfo в качестве значения параметра info
в следующем вызове метода start()
.
Класс NativeProcess и его возможности доступны только для программ AIR, установленных с помощью собственной программы установки. В ходе отладки можно передать аргумент -profile extendedDesktop
в ADL, чтобы обеспечить возможность выполнения процессов NativeProcess. Проверьте свойство NativeProcess.isSupported
, чтобы определить, поддерживается ли связь с собственными процессами.
Важные моменты с точки зрения безопасности
Встроенный API собственных процессов может запустить любой исполняемый файл в системе пользователя. Соблюдайте крайнюю осторожность при создании и выполнении команд. Если любая часть используемой команды исходит от внешнего источника, тщательно проанализируйте безопасность выполнения такой команды. Подобным образом приложение AIR должно проверять данные, передаваемые выполняемому процессу.
Однако проверка ввода может представлять определенную трудность. Чтобы избежать таких трудностей, лучше написать собственное приложение (например, EXE-файл в ОС Windows), со специальными API-интерфейсами. Эти API должны обрабатывать только те команды, которые необходимы именно для приложения AIR. Например, собственное приложение может принимать только ограниченный набор инструкций через стандартный поток ввода.
Среда выполнения AIR в ОС Windows не разрешает непосредственное выполнение файлов .bat. Файлы .bat системы Windows выполняются программой интерпретатора команд (cmd.exe). При вызове файла .bat это приложение интерпретирует аргументы, передаваемые команде, как дополнительные приложения, которые требуется запустить. Вредоносная вставка лишних символов в строку аргумента может привести к выполнению приложением cmd.exe вредоносного или небезопасного приложения. Например, без надлежащей проверки данных приложение AIR может вызвать myBat.bat myArguments c:/evil.exe
. В результате этого приложение cmd.exe вместе с файлом .bat запустит приложение evil.exe.
Если вызвать метод start()
вместе с файлом .bat, объект NativeProcess выдаст исключение. Свойство message
объекта Error содержит строку «Error #3219: The NativeProcess could not be started» (Ошибка №3219. Не удалось запустить собственный процесс).
Параметры
info:NativeProcessStartupInfo — NativeProcessStartupInfo определяет информацию о запуске собственного процесса.
|
Выдает
IllegalOperationError — если в данный момент выполняется NativeProcess.
| |
ArgumentError — если свойство nativePath экземпляра NativeProcessStartupInfo не существует.
| |
Error — если не удалось запустить NativeProcess.
|
Связанные элементы API
exit | Событие |
flash.events.NativeProcessExitEvent
свойство NativeProcessExitEvent.type =
flash.events.NativeProcessExitEvent
Язык версии: | ActionScript 3.0 |
Версии среды выполнения: | AIR 2 |
Сообщает о завершении работы собственного процесса. Свойство exitCode
содержит значение, которое процесс возвращает операционной системе хоста при завершении работы. Если программа AIR завершает процесс с помощью метода exit()
объекта NativeProcess, свойство exitCode
получает значение NaN.
standardErrorClose | Событие |
flash.events.Event
свойство Event.type =
flash.events.Event
Язык версии: | ActionScript 3.0 |
Версии среды выполнения: | AIR 2 |
Сообщает о том, что объект NativeProcess закрыл свой поток ошибок.
standardErrorData | Событие |
flash.events.ProgressEvent
свойство ProgressEvent.type =
flash.events.ProgressEvent
Язык версии: | ActionScript 3.0 |
Версии среды выполнения: | AIR 2 |
Сообщает о том, что собственный процесс содержит данные, доступные для чтения, в стандартном потоке ошибок (stderror). Объект NativeProcess отправляет это событие, когда переполняется стандартный поток ошибок дочернего процесса или когда заполняется внутренний буфер, используемый для связи между процессами. Не создавайте код, зависимый от размера такого внутреннего буфера, так как он неодинаковый в разных версиях и операционных системах.
standardErrorIoError | Событие |
flash.events.IOErrorEvent
свойство IOErrorEvent.type =
flash.events.IOErrorEvent
Язык версии: | ActionScript 3.0 |
Версии среды выполнения: | AIR 2 |
Сообщает о том, что не удалось прочитать данные из стандартного потока ошибок (stderror). Объект NativeProcess может отправлять это событие, когда среда выполнения не может прочитать данные из стандартного канала ошибок собственного процесса.
standardInputClose | Событие |
flash.events.Event
свойство Event.type =
flash.events.Event
Язык версии: | ActionScript 3.0 |
Версии среды выполнения: | AIR 2 |
Сообщает о том, что объект NativeProcess закрыл свой поток ввода с помощью метода closeInput()
. Объект NativeProcess не отправляет это событие, когда собственный процесс закрывает поток ввода самостоятельно.
standardInputIoError | Событие |
flash.events.IOErrorEvent
свойство IOErrorEvent.type =
flash.events.IOErrorEvent
Язык версии: | ActionScript 3.0 |
Версии среды выполнения: | AIR 2 |
Сообщает о том, что запись в стандартный поток ввода (stdin) не удалась. Объект NativeProcess отправляет это событие, когда метод closeInput()
выполняется с ошибкой или когда среда выполнения не может записать данные в стандартный поток ввода собственного процесса.
standardInputProgress | Событие |
flash.events.ProgressEvent
свойство ProgressEvent.type =
flash.events.ProgressEvent
Язык версии: | ActionScript 3.0 |
Версии среды выполнения: | AIR 2 |
Сообщает о том, что объект NativeProcess записал данные в поток ввода для дочернего процесса. Объект NativeProcess отправляет это событие, когда в поток записываются данные. Это событие не указывает на то, удалось ли дочернему процессу прочитать эти данные.
standardOutputClose | Событие |
flash.events.Event
свойство Event.type =
flash.events.Event
Язык версии: | ActionScript 3.0 |
Версии среды выполнения: | AIR 2 |
Сообщает о том, что объект NativeProcess закрыл свой поток вывода.
standardOutputData | Событие |
flash.events.ProgressEvent
свойство ProgressEvent.type =
flash.events.ProgressEvent
Язык версии: | ActionScript 3.0 |
Версии среды выполнения: | AIR 2 |
Сообщает о том, что у собственного процесса есть доступные для чтения данные в потоке вывода. Объект NativeProcess отправляет это событие, когда переполняется стандартный поток вывода дочернего процесса или когда заполняется внутренний буфер, используемый для связи между процессами. Не создавайте код, зависимый от размера такого внутреннего буфера, так как он неодинаковый в разных версиях и операционных системах.
standardOutputIoError | Событие |
flash.events.IOErrorEvent
свойство IOErrorEvent.type =
flash.events.IOErrorEvent
Язык версии: | ActionScript 3.0 |
Версии среды выполнения: | AIR 2 |
Сообщает о том, что чтение из потока stdout завершилось ошибкой. Объект NativeProcess может отправлять это событие, когда среда выполнения не может прочитать данные из стандартного канала вывода собственного процесса.
package { import flash.display.Sprite; import flash.desktop.NativeProcess; import flash.desktop.NativeProcessStartupInfo; import flash.events.Event; import flash.events.ProgressEvent; import flash.events.IOErrorEvent; import flash.events.NativeProcessExitEvent; import flash.filesystem.File; public class NativeProcessExample extends Sprite { public var process:NativeProcess; public function NativeProcessExample() { if(NativeProcess.isSupported) { setupAndLaunch(); } else { trace("NativeProcess not supported."); } } public function setupAndLaunch():void { var nativeProcessStartupInfo:NativeProcessStartupInfo = new NativeProcessStartupInfo(); var file:File = File.applicationDirectory.resolvePath("test.py"); nativeProcessStartupInfo.executable = file; var processArgs:Vector.<String> = new Vector.<String>(); processArgs[0] = "foo"; nativeProcessStartupInfo.arguments = processArgs; process = new NativeProcess(); process.start(nativeProcessStartupInfo); process.addEventListener(ProgressEvent.STANDARD_OUTPUT_DATA, onOutputData); process.addEventListener(ProgressEvent.STANDARD_ERROR_DATA, onErrorData); process.addEventListener(NativeProcessExitEvent.EXIT, onExit); process.addEventListener(IOErrorEvent.STANDARD_OUTPUT_IO_ERROR, onIOError); process.addEventListener(IOErrorEvent.STANDARD_ERROR_IO_ERROR, onIOError); } public function onOutputData(event:ProgressEvent):void { trace("Got: ", process.standardOutput.readUTFBytes(process.standardOutput.bytesAvailable)); } public function onErrorData(event:ProgressEvent):void { trace("ERROR -", process.standardError.readUTFBytes(process.standardError.bytesAvailable)); } public function onExit(event:NativeProcessExitEvent):void { trace("Process exited with ", event.exitCode); } public function onIOError(event:IOErrorEvent):void { trace(event.toString()); } } }
#!/usr/bin/python
# ------------------------------------------------------------------------------
# Sample Python script
# ------------------------------------------------------------------------------
import sys
for word in sys.argv: #echo the command line arguments
print word
print "HI FROM PYTHON"
print "Enter user name"
line = sys.stdin.readline()
sys.stdout.write("hello," + line)
Tue Jun 12 2018, 11:34 AM Z