2011-03-31 69 views
1

我有一个调用python脚本的Adobe Air程序。我不认为动作3.0正在进行适当的调用。代码:从Actionscript调用python

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

在终端(苹果机),以下工作正常:

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

的args.push(pyScript.native ....行是问题的一个我会很感激一些帮助

回答

6

我遇到过使用Air的类似问题我需要从Air应用程序打印到收据打印机我无法从应用程序本身执行此操作,因此我使用了python RPC服务器来完成我通过http与它交谈。下面是一个简化版本给你一个想法:

蟒蛇RPC服务器

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

在空气中我创建呼叫作为一个XML字符串,使我的请求。 我没有显示所有的细节,因为我使用JavaScript不动作,所以请把它当作伪代码。

// 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