我有一个使用Flex的GUI。我有一个条件,我需要在本地机器中执行一些命令行参数,并将结果返回或输出回文本框区域。如何在本地机器上执行提交,执行命令并返回输出?
Command to execute example:
echo logfile.log | grep username
Code:
button1.onRelease = function ()
{
// in this computer, it will now run a command, please wait.
}
答案 0 :(得分:7)
您无法使用动作脚本2执行此操作,并且您无法使用Flash网页播放器中的动作脚本3执行此操作。您可以使用某些工具创建投影仪,使用动作脚本2和3来添加此类扩展功能,但您不能简单地通过网络执行此操作,因为这样会带来极大的安全风险。
但是,您可以使用Adobe AIR 2.0或更高版本执行此操作。您使用NativeProcess类并检测操作系统,启动终端或cmd.exe,然后您可以对它运行命令。下面是我开发的项目中的一些代码,用于使用AIR运行针对操作系统的命令,就像您尝试的那样:
private var os:String;
private var consoleExecutable:File;
private var consoleNativeProcess:NativeProcess;
private function usbMounted(e:StorageVolumeChangeEvent):void
{
//status.appendText('Device: ' + e.storageVolume.name + ' mounted to drive: ' + e.storageVolume.drive + '\n');
os = Capabilities.os.substr(0, 3).toLowerCase();
switch (os)
{
case "win":
//Windows OS
var rootDirs:Array = File.getRootDirectories();
var i:int = 0;
for (i; i < rootDirs.length; ++i) {
consoleExecutable = rootDirs[i] as File;
consoleExecutable = consoleExecutable.resolvePath("Windows");
if (consoleExecutable.exists == true) {
consoleExecutable = consoleExecutable.resolvePath("System32");
consoleExecutable = consoleExecutable.resolvePath("cmd.exe");
i = rootDirs.length;
}
}
break;
case "lin":
//Linux OS
break;
case "mac":
//Mac OS
break;
case "iph":
//Iphone OS
break;
}
var consoleNativeProcessStartupNfo:NativeProcessStartupInfo = new NativeProcessStartupInfo();
consoleNativeProcessStartupNfo.executable = consoleExecutable;
var startupArgs:Vector.<String> = new Vector.<String>();
startupArgs.push('/C fsutil fsinfo volumeinfo ' + e.storageVolume.drive + ':');
consoleNativeProcessStartupNfo.arguments = startupArgs;
consoleNativeProcess = new NativeProcess();
consoleNativeProcess.addEventListener(ProgressEvent.STANDARD_OUTPUT_DATA, consoleOutput);
consoleNativeProcess.start(consoleNativeProcessStartupNfo);
consoleNativeProcess.closeInput();
}
private function consoleOutput(e:ProgressEvent):void
{
var consoleOuput:String = consoleNativeProcess.standardOutput.readUTFBytes(consoleNativeProcess.standardOutput.bytesAvailable);
switch (os)
{
case "win":
//Windows OS
break;
case "lin":
//Linux OS
break;
case "mac":
//Mac OS
break;
case "iph":
//Iphone OS
break;
}
consoleNativeProcess.exit();
}
所以代码应该非常简单。它可能不会全部存在,因为我刚刚复制了处理本机进程启动,输出和终止的代码部分。然后我删除了敏感代码的部分内容。基本上你只是获取操作系统信息,导航到可执行文件的路径,检查它是否存在,如果存在,启动它,对它运行命令并等待输出。我在处理输出时也输入了一个switch语句来检查操作系统,因为可以安全地假设你接下来输出的内容也将取决于操作系统(至少在我的情况下是这样)。如果您需要更多帮助来理解所有这些,我建议使用Google搜索有关Adobe AIR Native Process API的教程,或者在此处发布更多问题。 :)