패키지 | 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 클래스를 사용하면 표준 입력, 표준 출력, 표준 오류 파이프에 직접 액세스할 수 있습니다.
참고:
extendedTV
프로파일을 사용하는 AIR for TV 응용 프로그램은 기본 확장을 사용하여 기본 프로세스를 실행할 수 있습니다. 마찬가지로, 휴대 장치에서 기본 확장을 사용할 수 있습니다.
기타 예제
관련 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 |
실행 중인 기본 프로세스가 현재 프로파일에서 지원되는지 여부를 나타냅니다. 이 속성은 extendedDesktop 프로파일에서 실행 중인 경우에만 true
를 반환합니다. 또한 NativeProcess.isSupported
는 AIR 파일로 설치된 응용 프로그램에 대해 항상 false
입니다. NativeProcess 클래스를 사용하려면 ADT -target native
플래그를 사용하여 AIR 응용 프로그램을 패키징해야 합니다.
구현
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
예외가 발생합니다. NativeProcess 객체의 running
속성이 true
를 반환할 경우 프로세스가 실행 중입니다. 운영 체제가 프로세스를 시작할 수 없는 경우 Error
가 발생합니다.
NativeProcess 인스턴스는 기본 운영 체제의 단일 프로세스에 해당합니다. 동일한 운영 체제 프로세스 인스턴스를 동시에 둘 이상 실행하려는 경우 자식 프로세스당 하나의 NativeProcess 인스턴스를 만들 수 있습니다.
NativeProcess 객체의 running
속성이 false
를 반환할 때마다 이 메서드를 호출할 수 있습니다. 따라서 NativeProcess 객체를 다시 사용할 수 있습니다. 즉, NativeProcess 인스턴스를 생성하고 start()
메서드를 호출한 다음 exit
이벤트를 기다렸다가 start()
메서드를 다시 호출할 수 있습니다. start()
메서드에 대한 후속 호출에서 다른 NativeProcessStartupInfo 객체를 info
매개 변수 값으로 사용할 수 있습니다.
NativeProcess 클래스와 해당 기능은 기본 설치 프로그램으로 설치한 AIR 응용 프로그램에서만 사용할 수 있습니다. 디버깅할 때 -profile extendedDesktop
인수를 ADL로 전달하여 NativeProcess 기능을 활성화할 수 있습니다. NativeProcess.isSupported
속성을 검사하여 기본 프로세스 통신이 지원되는지 여부를 확인합니다.
중요한 보안 고려 사항:
기본 프로세스 API는 사용자 시스템에서 모든 실행 파일을 실행할 수 있습니다. 따라서 명령을 생성하고 실행할 때는 매우 조심해야 합니다. 실행할 명령의 일부가 외부 소스에서 제공되는 경우 해당 명령이 실행해도 안전한지 신중하게 확인해야 합니다. 마찬가지로 AIR 응용 프로그램에서도 실행 중인 프로세스에 전달되는 데이터의 유효성을 검사해야 합니다.
그러나 입력 데이터의 유효성을 검사하는 것이 어려울 수 있습니다. 이러한 어려움을 피하기 위해 특정 API가 있는 기본 응용 프로그램(예: Windows의 EXE 파일)을 작성하는 것이 가장 좋습니다. 이러한 API는 특히 AIR 응용 프로그램에 필요한 명령만 처리해야 합니다. 예를 들어 기본 응용 프로그램에서 표준 입력 스트림을 통해 제한된 명령 집합만 받아들일 수 있습니다.
Windows의 AIR에서는 .bat 파일을 직접 실행할 수 없습니다. Windows .bat 파일은 명령 해석기 프로그램(cmd.exe)에 의해 실행됩니다. .bat 파일을 호출하면 이 명령 응용 프로그램이 명령에 전달된 인수를 추가 응용 프로그램으로 해석하여 실행할 수 있습니다. 인수 문자열에 악의적인 별도의 문자를 삽입하면 cmd.exe이가 해롭거나 위험한 응용 프로그램을 실행할 수 있습니다. 예를 들어 적절한 데이터 유효성 검사가 없으면 AIR 응용 프로그램이 myBat.bat myArguments c:/evil.exe
를 실행할 수 있습니다. 이 명령 응용 프로그램은 .bat 파일을 실행하면서 evil.exe 응용 프로그램도 실행하게 됩니다.
.bat 파일과 함께 start()
메서드를 호출하면 NativeProcess 객체가 예외를 throw합니다. Error 객체의 message
속성에는 "오류 #3219: NativeProcess를 시작하지 못했습니다."라는 문자열이 포함됩니다.
매개 변수
info:NativeProcessStartupInfo — NativeProcessStartupInfo는 기본 프로세스를 시작하는 방법에 대한 정보를 정의합니다.
|
오류
IllegalOperationError — NativeProcess가 현재 실행 중인 경우입니다.
| |
ArgumentError — NativeProcessStartupInfo의 nativePath 속성이 없는 경우입니다.
| |
Error — NativeProcess가 성공적으로 시작하지 않은 경우입니다.
|
관련 API 요소
exit | 이벤트 |
flash.events.NativeProcessExitEvent
속성 NativeProcessExitEvent.type =
flash.events.NativeProcessExitEvent
언어 버전: | ActionScript 3.0 |
런타임 버전: | AIR 2 |
기본 프로세스가 종료되었음을 알립니다. exitCode
속성에는 프로세스가 종료 시 호스트 운영 체제에 반환하는 값이 들어 있습니다. AIR 응용 프로그램이 NativeProcess 객체의 exit()
메서드를 호출하여 프로세스를 종료하는 경우 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 객체는 자식 프로세스가 stdout 스트림을 플러시할 때 또는 프로세스 간 통신에 사용되는 내부 버퍼가 가득 찼을 때 이 이벤트를 전달합니다. 이 내부 버퍼의 크기는 버전과 운영 체제에 따라 다르므로 내부 버퍼의 크기에 따라 달라지는 코드는 작성하지 마십시오.
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, 03:17 PM Z