包 | 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 | 属性 |
running | 属性 |
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
。该命令应用程序除了运行您的批处理文件外,还将启动 evil.exe 应用程序。
如果使用 .bat 文件调用 start()
方法,NativeProcess 对象会引发异常。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) 流已失败。当 closeInput()
方法失败或运行时无法将数据写入到本机进程的标准输入管道时,NativeProcess 对象将调度此事件。
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 |
表示输出流上存在本机进程可以读取的数据。当子进程刷新其 stdout 流或用于在进程之间通信的内部缓冲区已满时,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:04 AM Z