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
...
這有什麼錯我的代碼?我該如何調試它?
謝謝。
這是因爲curl將信息寫入stderror以避免污染stdout。 – 2013-05-07 14:12:45
從stderror中讀取信息以便向用戶提供進度是否安全? – 2013-05-07 14:46:16