用于 Adobe® Flash® Platform 的 ActionScript® 3.0 参考
主页  |  隐藏包列表和类列表 |   |   |  新增内容  |  索引  |  附录  |  为什么显示为英语?
过滤条件: 正在从服务器检索数据...
正在从服务器检索数据...
flash.desktop 

NativeProcess  - AS3

flash.desktop
public class NativeProcess
继承NativeProcess Inheritance EventDispatcher Inheritance Object

语言版本: ActionScript 3.0
运行时版本: AIR 2

NativeProcess 类提供命令行集成和常规启动功能。NativeProcess 类允许 AIR 应用程序在主机操作系统上执行本机进程。AIR 应用程序可以监视进程的标准输入 (stdin) 和标准输出 (stdout) 流以及进程的标准错误 (stderr) 流。

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 元素



公共属性
 属性由以下参数定义
 Inheritedconstructor : Object
对类对象或给定对象实例的构造函数的引用。
Object
      isSupported : Boolean
[静态] [只读] 表示在当前的配置文件中是否支持运行本机进程。
NativeProcess
      running : Boolean
[只读] 表示本机进程当前是否正在运行。
NativeProcess
      standardError : IDataInput
[只读] 提供对来自此本机进程的标准错误输出的访问。
NativeProcess
      standardInput : IDataOutput
[只读] 提供对此本机进程的标准输入的访问。
NativeProcess
      standardOutput : IDataInput
[只读] 提供对此本机进程标准输出管道的访问。
NativeProcess
公共方法
 方法由以下参数定义
  
    NativeProcess()
构建未初始化的 NativeProcess 对象。
NativeProcess
 Inherited
addEventListener(type:String, listener:Function, useCapture:Boolean = false, priority:int = 0, useWeakReference:Boolean = false):void
使用 EventDispatcher 对象注册事件侦听器对象,以使侦听器能够接收事件通知。
EventDispatcher
  
    closeInput():void
关闭此进程上的输入流。
NativeProcess
 Inherited
将事件调度到事件流中。
EventDispatcher
  
    exit(force:Boolean = false):void
尝试退出本机进程。
NativeProcess
 Inherited
检查 EventDispatcher 对象是否为特定事件类型注册了任何侦听器。
EventDispatcher
 Inherited
表示对象是否已经定义了指定的属性。
Object
 Inherited
表示 Object 类的实例是否在指定为参数的对象的原型链中。
Object
 Inherited
表示指定的属性是否存在、是否可枚举。
Object
 Inherited
removeEventListener(type:String, listener:Function, useCapture:Boolean = false):void
从 EventDispatcher 对象中删除侦听器。
EventDispatcher
 Inherited
设置循环操作动态属性的可用性。
Object
  
启动由指定的启动信息标识的本机进程。
NativeProcess
 Inherited
返回此对象的字符串表示形式,其格式设置遵守区域设置特定的约定。
Object
 Inherited
返回指定对象的字符串表示形式。
Object
 Inherited
返回指定对象的原始值。
Object
 Inherited
检查是否用此 EventDispatcher 对象或其任何祖代为指定事件类型注册了事件侦听器。
EventDispatcher
事件
 事件 摘要 由以下参数定义
 Inherited[广播事件] Flash Player 或 AIR 应用程序获得操作系统焦点并变为活动状态时将调度此事件。EventDispatcher
 Inherited[广播事件] Flash Player 或 AIR 应用程序失去操作系统焦点并变为非活动状态时将调度此事件。EventDispatcher
  
    exit
表示本机进程已退出。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。此外,对于作为 AIR 文件安装的应用程序,NativeProcess.isSupported 始终为 false。您必须使用 ADT -target native 标志将 AIR 应用程序打包,才能使用 NativeProcess 类。



实现
    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:IOErrorEvent — 在关闭此进程的输入流时出现问题
 
standardInputClose:Event — 输入流已关闭。

    exit

()方法 
public function exit(force:Boolean = false):void

语言版本: ActionScript 3.0
运行时版本: AIR 2

尝试退出本机进程。

参数

force:Boolean (default = false) — 应用程序是否应尝试强制退出本机进程(如有必要)。

如果 force 参数设置为 false,此方法将尝试妥善退出本机进程。此方法“要求”本机进程退出。本机进程可能会忽略此请求,因此,此方法不能保证确实让本机进程退出。NativeProcess 对象仅调度 NativeProcessExitEvent,即使本机进程退出也是如此。

如果 force 参数设置为 true,此方法会尝试强制退出本机进程。如非绝对必要,请不要在 force 参数设置为 true 时调用此方法。在 force 参数设置为 true 时调用此方法可能会对与本机进程相关的系统资源状态产生不利的影响。例如,可能会使打开的文件处于不一致的状态中。运行时会尽力设法强制本机进程退出。但是,它并不能保证本机进程一定会退出。NativeProcess 对象仅调度 NativeProcessExitEvent,即使本机进程退出也是如此。

如果 NativeProcess 成功退出,它会调度 NativeProcessExitEvent 事件。

    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 对象可调度此事件。

NativeProcessExample.as

下面的示例会检查计算机是否支持本机进程通信。如果支持,则应用程序将为本机进程设置事件侦听器,并启动主应用程序目录中的 test.py 文件:
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());
        }
    }
}
将下列 Python 脚本添加到应用程序目录中名为 test.py 的文件中(并确保已安装 Python):
 #!/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)




[ X ]为什么显示为英语?
《ActionScript 3.0 参考》中的内容以英语显示

《ActionScript 3.0 参考》中的部分内容未翻译成所有语言。当某个语言元素未翻译时,将显示为英语。例如,ga.controls.HelpBox 类未翻译成任何语言。因此在简体中文版的参考中,ga.controls.HelpBox 类显示为英语。