How can i on button press execute a command in the command prompt and get back the output in ActionScript?

天大地大妈咪最大 提交于 2019-12-02 02:13:42

问题


I have a GUI using Flex. I have a condition like i need to execute some command line arguments in the local machine and get the results back or output back to a textbox area. How can i do a button on submit, execute command in the local machine and return the output?

Command to execute example: 

    echo logfile.log | grep username

Code:

button1.onRelease = function () 
{
    // in this computer, it will now run a command, please wait.
}

My reference from the answer: https://gist.github.com/993905


回答1:


You're not going to be able to do this using actionscript 2 and you're not going to be able to do this using actionscript 3 in the flash web player. There are certain tools you can use to create projectors using actionscript 2 and 3 to add this kind of extended capability but you cannot simply do it from the web, as of course this would be an extreme security risk.

However, you can do this with Adobe AIR 2.0 or greater. You use the NativeProcess class and detect the operating system, launch the terminal or cmd.exe and then you can run commands against it. Below is some code from a project I developed to run commands against the OS using AIR just as you're trying to do:

            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();
            }

So the code should be pretty straight forward. It might not all be there as I've just copied the portion of the code dealing with the native process startup, output and termination. I then deleted parts of the code that were sensitive. Basically you're just getting the OS info, navigating to the path of the executable, check to see if it exists and if so, start it up, run a command against it and wait for output. I put in a switch statement to check the OS when handling the output as well, since it's safe to assume what you do next with the output will also be OS dependent (or at least in my case it was). If you need more help understanding all this I suggest googling for a tutorial on the Adobe AIR Native Process API or just post some more questions here. :)



来源:https://stackoverflow.com/questions/6143606/how-can-i-on-button-press-execute-a-command-in-the-command-prompt-and-get-back-t

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!