2016-02-24 83 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); 

}