Adobe Air2 NativeProcess API с Javascript - PullRequest
       4

Adobe Air2 NativeProcess API с Javascript

1 голос
/ 03 сентября 2010

Я пытаюсь запустить скрипт Python с API NativeProcess из Javascript.В Справочнике по Adobe AIR API для разработчиков HTML я нашел хороший пример для этой задачи, но он не работает.Я посмотрел множество других примеров, но все еще не могу найти ответ.

Вот пример кода для файла HTML:

<html>
   <head>
   <title>Test</title>
   <script type="text/javascript" src="AIRAliases.js"></script>
   <script type="text/javascript"> 

        var process;

        function launchProcess()
        {
            if(air.NativeProcess.isSupported)
            {
                air.trace("NativeProcess supported.");
    setupAndLaunch();
            }
            else
            {
                air.trace("NativeProcess not supported.");
            }
        }

        function setupAndLaunch()
        {     
            var nativeProcessStartupInfo = new air.NativeProcessStartupInfo();
            var file = air.File.applicationDirectory.resolvePath("test.py");
            nativeProcessStartupInfo.executable = file;

            var processArgs = new air.Vector["<String>"]();
            processArgs.push("foo");
            nativeProcessStartupInfo.arguments = processArgs;

            process = new air.NativeProcess();
            process.start(nativeProcessStartupInfo);
            process.addEventListener(air.ProgressEvent.STANDARD_OUTPUT_DATA, onOutputData);
            process.addEventListener(air.ProgressEvent.STANDARD_ERROR_DATA, onErrorData);
            process.addEventListener(air.NativeProcessExitEvent.EXIT, onExit);
            process.addEventListener(air.IOErrorEvent.STANDARD_OUTPUT_IO_ERROR, onIOError);
            process.addEventListener(air.IOErrorEvent.STANDARD_ERROR_IO_ERROR, onIOError);
        }

        function onOutputData()
        {
            air.trace("Got: ", process.standardOutput.readUTFBytes(process.standardOutput.bytesAvailable)); 
        }

        function onErrorData(event)
        {
            air.trace("ERROR -", process.standardError.readUTFBytes(process.standardError.bytesAvailable)); 
        }

        function onExit(event)
        {
            air.trace("Process exited with ", event.exitCode);
        }

        function onIOError(event)
        {
             air.trace(event.toString());
        }

   </script>
   </head>

   <body onload="launchProcess()">
   </body>
</html>

А вот код для файла Python (этоне работает):

#! /usr/bin/env python2.5
# -*- coding: utf-8 -*-

import sys

for word in sys.argv: #echo the command line arguments
 print word

print "HI FROM PYTHON"
print "Enter user name" 
line = sys.stdin.readline()

sys.stdout.write("hello," + line)

Запуск приложения Air с командой adl main.xml показывает в моем терминале (я использую OSX) только «Поддерживается NativeProcess».

Спасибо за помощь.

А вот изменения, которые я внес в файл python, чтобы он заработал:

#! /usr/bin/env python2.5
# -*- coding: utf-8 -*-

import sys
import os

def convert(args):
 path = os.path.expanduser('~') + "/Desktop/"

 myFile = open(path+args, 'w')
 myFile.write('Hello World\n')
 myFile.close()

 sys.stdout.write("Python Done")

if __name__ == "__main__":
 convert(sys.argv[1])

Благодаря pyfunc ...

1 Ответ

0 голосов
/ 03 сентября 2010

Если вы запустите свою программу, то вы получите следующее:

test.py
HI FROM PYTHON
Enter user name

То есть этот фрагмент кода Python ищет стандартный ввод и записывает в стандартный вывод.Я не думаю, что это было бы возможно, если бы вы не запускали это из оболочки.

Как насчет удаления:

line = sys.stdin.readline()
sys.stdout.write("hello," + line)

и создания некоторых безобидных выражений python, таких как

a = 1+4 

и посмотри, работает ли это.У меня есть догадка, что это может быть проблемой.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...