2013-05-05 34 views
0

在Flex AIR應用程序中,我想使用NativeProcess API和curl將文件上載到ftp-server。
這裏是簡化代碼:AIR NativeProcess執行作業,但它將進度數據發送到ProgressEvent.STANDARD_ERROR_DATA

protected function startProcess(event:MouseEvent):void 
{ 
    var processInfo:NativeProcessStartupInfo = new NativeProcessStartupInfo(); 
    processInfo.executable = new File('/usr/bin/curl'); 
    var processArgs:Vector.<String> = new Vector.<String>(); 
    processArgs.push("-T");     
    processArgs.push("/Users/UserName/Desktop/001.mov");      
    processArgs.push("ftp://domainIp//www/site.com/");     
    processArgs.push("--user");     
    processArgs.push("username:password");     
    processInfo.arguments = processArgs; 

    var process:NativeProcess = new NativeProcess(); 
    process.addEventListener(ProgressEvent.STANDARD_OUTPUT_DATA, outputDataHandler); 
    process.addEventListener(ProgressEvent.STANDARD_ERROR_DATA, errorOutputDataHandler); 
    process.start(processInfo); 
} 

它的工作井(即目標文件上傳),但它發出ProgressEvent.STANDARD_ERROR_DATA,而不是ProgressEvent.STANDARD_OUTPUT_DATA和所有進度數據去process.standardError

protected function errorOutputDataHandler(event:ProgressEvent):void 
{ 
    var process = event.currentTarget as NativeProcess; 
    trace(process.standardError.readUTFBytes(process.standardError.bytesAvailable)); 
} 

這裏是後者的功能的輸出:

% Total % Received % Xferd Average Speed Time Time  Time Current 
           Dload Upload Total Spent Left Speed 

0  0 0  0 0  0  0  0 --:--:-- --:--:-- --:--:--  0 

0  0 0  0 0  0  0  0 --:--:-- --:--:-- --:--:--  0 

1 15.8M 0  0 1 200k  0 166k 0:01:37 0:00:01 0:01:36 177k 

2 15.8M 0  0 2 381k  0 143k 0:01:53 0:00:02 0:01:51 146k 

... 

這有什麼錯我的代碼?我該如何調試它?
謝謝。

回答

2

你看到的是curl的進度計。嘗試使用-sS選項來禁用它,但保留錯誤消息。

+0

這是因爲curl將信息寫入stderror以避免污染stdout。 – 2013-05-07 14:12:45

+0

從stderror中讀取信息以便向用戶提供進度是否安全? – 2013-05-07 14:46:16