2016-02-24 82 views
0

我想通过actionscript与python脚本通信。它给我就行错误:
var stdOut:ByteArray = process.standardOutput; 从下图所示的功能:
NativeProcess通信给出错误

public function onOutputData(event:ProgressEvent):void 
{ 
    var stdOut:ByteArray = process.standardOutput; //error 
    var data:String = stdOut.readUTFBytes(process.standardOutput.bytesAvailable); 
    trace("Got: ", data); 
} 

错误是:

Implicit coercion of a value with static type IDataInput to a possibly unrelated type ByteArray.

我下面的相同的方法,在Adobe的网页。下面是一些测试代码:

package 
{ 
    import flash.display.Sprite; 
    import flash.desktop.NativeProcessStartupInfo; 
    import flash.filesystem.File; 
    import flash.desktop.NativeProcess; 
    import flash.events.ProgressEvent; 
    import flash.utils.ByteArray; 

    public class InstaUtility extends Sprite 
    { 
     public var nativeProcessStartupInfo:NativeProcessStartupInfo = new  NativeProcessStartupInfo(); 
     public var file:File = new File("C:/Python27/python.exe"); 
     public var process:NativeProcess = new NativeProcess(); 
     public function InstaUtility() 
     { 
      nativeProcessStartupInfo.executable = file; 
      nativeProcessStartupInfo.workingDirectory =  File.applicationDirectory.resolvePath("."); 
      trace("Location " + File.applicationDirectory.resolvePath(".").nativePath); 
      var processArgs:Vector.<String> = new Vector.<String>(); 
      processArgs[0] = "test.py"; 
      nativeProcessStartupInfo.arguments = processArgs; 
      var process:NativeProcess = new NativeProcess(); 
      process.addEventListener(ProgressEvent.STANDARD_OUTPUT_DATA, onOutputData); 
      process.start(nativeProcessStartupInfo); 
     } 
     public function onOutputData(event:ProgressEvent):void 
     { 
      var stdOut:ByteArray = process.standardOutput; //error 
      var data:String = stdOut.readUTFBytes(process.standardOutput.bytesAvailable); 
      trace("Got: ", data); 
     } 

    } 
} 
+0

也越来越运行时错误: “主线程(暂停:错误:错误#3219:时,NativeProcess无法启动, '在当前的配置文件不支持。')\t” –

+0

如果'(NativeProcess.isSupported) {(0;};}} }'请注意:“NativeProcess类及其功能仅适用于使用本机安装程序(扩展桌面配置文件应用程序)安装的AIR应用程序。” – user2836288

回答

0

The NativeProcess could not be started. Not supported in current profile.

你在Flash IDE测试?

  • IDE内测试:在你的AIR发布设置确保你打勾只有“扩展桌面”通过IDE调试时。这样,您还可以获得痕迹等

  • 测试后发布:您必须勾选两个“桌面”和“扩展桌面”,也滴答“Windows安装程序文件(.exe)”。使用生成的.exe文件(而不是.air文件)安装您的应用程序。

Implicit coercion of a value with static type IDataInput to a possibly unrelated type ByteArray.

var stdOut:ByteArray = process.standardOutput; //error是不是它是如何做!每次进度事件触发时,请不要使任何var。每个发射持有大约32kb64kb只有字节(不记得),所以如果预期结果更大,它将继续激发多个块...使用和回收单个public byteArray来保存所有结果数据。

尝试设置如下图所示:

//# Declare the public variables 
public var stdOut : ByteArray = new ByteArray(); 
public var data_String : String = ""; 

你的进程还需要一个NativeProcessExitEvent.EXIT听众。

process.addEventListener(NativeProcessExitEvent.EXIT, on_Process_Exit); 

.start一个过程之前,也很清楚的ByteArray准备新数据与stdOut.clear();。现在

progressEvent可以像下面这样... (进程对结果数据为标准输出字节)

public function onOutputData (event:ProgressEvent) : void 
{ 
    //var stdOut:ByteArray = process.standardOutput; //error 

    //# Progress could fire many times so keep adding data to build the final result 
    //# "stdOut.length" will be zero at first but add more data to tail end (ie: length) 
    process.standardOutput.readBytes(stdOut, stdOut.length, process.standardOutput.bytesAvailable); 

    //# Below should be in a Process "Exit" listener but might work here too 
    stdOut.position = 0; //move pointer back before reading bytes 
    data_String = stdOut.readUTFBytes(stdOut.length); 
    trace("function onOutputData -- Got : " + data_String); 
} 

但你真的需要添加一个“onProcessExit”监听器,然后只检查结果时,这个过程本身已经完成。(此处追踪对保证结果更安全)

public function on_Process_Exit (event : NativeProcessExitEvent) : void 
{ 
    trace ("PYTHON Process finished : ############# ") 
    stdOut.position = 0; //# move pointer back before reading bytes 
    data_String = stdOut.readUTFBytes(stdOut.length); 
    trace("PYTHON Process Got : " + data_String); 

}