Как я могу при нажатии кнопки выполнить команду в командной строке и получить обратно вывод в ActionScript? - PullRequest
2 голосов
/ 26 мая 2011

У меня есть графический интерфейс с использованием Flex.У меня есть условие, как мне нужно выполнить некоторые аргументы командной строки на локальном компьютере и получить результаты обратно или вывод обратно в область текстового поля.Как сделать кнопку «Отправить», выполнить команду на локальном компьютере и вернуть результат?

Command to execute example: 

    echo logfile.log | grep username

Code:

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

Моя ссылка из ответа: https://gist.github.com/993905

1 Ответ

7 голосов
/ 26 мая 2011

Вы не сможете сделать это с помощью Actionscript 2, и вы не сможете сделать это с помощью ActionScript 3 во флэш-веб-плеере.Существуют определенные инструменты, которые вы можете использовать для создания проекторов, использующих ActionScript 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 для проверки ОС при обработке вывода, так как можно предположить, что дальнейшие действия с выводом также будут зависеть от ОС (или, по крайней мере, в моем случае это было).Если вам нужна дополнительная помощь для понимания всего этого, я предлагаю поискать учебник по API-интерфейсу Adobe AIR Native Process или просто опубликовать еще несколько вопросов здесь.:)

...