Вызов питона из Actionscript - PullRequest
1 голос
/ 31 марта 2011

У меня есть программа Adobe Air, которая вызывает скрипт на python. Я не думаю, что ActionScript 3.0 делает правильный вызов. Код:

        var file:File;
        var args:Vector.<String> = new Vector.<String>;

            file = new File().resolvePath("/usr/bin/python");

            var pyScript:File;
            pyScript = File.applicationDirectory.resolvePath("python/mac/merge.py");

            var tempOutPath:String = File.applicationStorageDirectory.resolvePath("out.pdf").nativePath;
            args.push(pyScript.nativePath, "-w", "-o", tempOutPath, "-i");

            for(var x:int; x < numFilesToProcess; x++){

                var pdfPath:String = File(pdfs.getItemAt(x)).nativePath;

                args.push(pdfPath);

            }

            callNative(file, args);

В терминале (Mac) нормально работает следующее:

python merge.py -w -o out.pdf -i file1.pdf file2.pdf

Строка args.push (pyScript.native .... является проблемной. Буду признателен за помощь.

1 Ответ

6 голосов
/ 01 апреля 2011

Я столкнулся с подобной проблемой при использовании Air. Мне нужно было распечатать на чековый принтер из приложения Air. Я не мог сделать это из самого приложения, поэтому я использовал RPC-сервер Python, чтобы выполнить работу за меня, и поговорил с ним по http. ниже приведена упрощенная версия, чтобы дать вам представление:

RPC-сервер Python

from SimpleXMLRPCServer import SimpleXMLRPCServer
from SimpleXMLRPCServer import SimpleXMLRPCRequestHandler

class RequestHandler(SimpleXMLRPCRequestHandler):
    rpc_paths = ('/','/RPC2')

server = SimpleXMLRPCServer(('localhost', 8123), requestHandler=RequestHandler)

def myService( arg0, arg1 ):
    #do the stuff
    return 0

server.register_function(myService)
server.serve_forever()

В Air я создаю вызов в виде строки XML и делаю свой запрос. Я не показал все детали, так как использовал javascript, а не actionscript, поэтому, пожалуйста, рассматривайте это как псевдокод.

// XML as a string
// possibly create the XML and toXMLString() it?
var data:String = '
<?xml version="1.0"?>
<methodCall>
    <methodName>myService</methodName>
    <params>
        <param>
            <string>file1.pdf</string>
        </param>
        <param>
            <string>file2.pdf</string>
        </param>
    </params>
</methodCall>';

var req:URLRequest = new URLRequest('localhost:8123');
rec.method = 'POST';
rec.data = data;
var loader:URLLoader = new URLLoader( req );
//etc
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...