有没有办法在adobe air中与cmd(使用本机进程)进行通信。 举个例子; 如何将“ping www.google.com”发送到cmd并在Air中捕获返回值。
修改
Microsoft Windows [Version 6.1.7600]
Copyright (c) 2009 Microsoft Corporation. All rights reserved.
C:\Program Files\Adobe\Adobe Flash Builder 4.5>ping www.google.com
Pinging www.l.google.com [209.85.175.103] with 32 bytes of data:
Reply from 209.85.175.103: bytes=32 time=1733ms TTL=50
Reply from 209.85.175.103: bytes=32 time=189ms TTL=50
Reply from 209.85.175.103: bytes=32 time=188ms TTL=50
Reply from 209.85.175.103: bytes=32 time=186ms TTL=50
Ping statistics for 209.85.175.103:
Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),
Approximate round trip times in milli-seconds:
Minimum = 186ms, Maximum = 1733ms, Average = 574ms
C:\Program Files\Adobe\Adobe Flash Builder 4.5>
我可以从Air应用程序上面打印。我需要知道是否有一种特定的方法来获取最小值=?,最大值=?和平均=? 计划爆炸字符串。还有另一种方式吗?请帮帮我
提前致谢。
答案 0 :(得分:2)
您应该阅读Interacting with Native Processes in AIR。您在命令提示符中编写的内容(在您的情况下为ping
)是另一个位于Windows路径中指定的文件夹中的exe文件。因此,您实际上必须在AIR中使用ping.exe
类调用NativeProcess
。或者,您可以研究exe的工作方式,然后在AIR应用程序中实现该逻辑。
修改强>
编辑完问题后,有以下详细信息:
您使用Regular Expressions(关注该链接并了解正则表达式)
因为你想匹配这种模式
最小=(数字)ms,最大=(数字)ms,平均=(数字)ms
你的正则表达式看起来像
var r:RegExp=/Minimum = ([\d\.]+)ms\, Maximum = ([\d\.]+)ms\, Average = ([\d\.]+)ms/i;
//Then, you execute this on your result string
var arr:Array=r.exec(result);
//Then check if the result matched your regex
if(arr != null) {
var min:int=arr[1];
var max:int=arr[2];
var avg:int=arr[3];
} else {
trace("invalid result from ping");
}
答案 1 :(得分:1)
要执行shell命令(例如ping),您需要从其位置运行cmd.exe或运行ping.exe。我发现在AIR中没有直接执行shell命令的方法,也禁止执行bat文件。因此,要调用cmd.exe,您需要知道它在哪里。它的位置由环境变量%ComSpec%
给出(我假设我们正在谈论Windows),但是你也无法从AIR应用程序中获得这个值。
所以,当我解决了这个问题时,我只是将cmd.exe与我的原生AIR应用程序捆绑在一起。不是最好的解决方案,因为cmd.exe是在另一个操作系统上使用的。您可以通过这种方式解决问题:
system()
命令执行此操作,请参阅WinApi文档。或者,如果您愿意,可以创建本机exe,它从AIR应用程序获取参数并使用system()
在shell上执行它们。然后AIR应用程序可以从此exe读取控制台输出。 ActionScript的工作量较少,C ++的工作量较少(或者用于本地帮助程序的任何工作)
的更新强>
如果你已经有ping输出,只需用RegExp解析它,比如
"Reply from \d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}: bytes=32 time=(\d{1,})ms TTL=\d{1,}"
。将捕获的时间字符串转换为int,然后计算最小值/最大值/平均值。