我使用NativeProcess接口从AIR应用程序运行python脚本时遇到了一些麻烦。从理论上讲,这应该很简单。 Adobe甚至在ActionScript 3.0 documentation for NativeProcess中使用它作为示例,如下所示:
var nativeProcessStartupInfo:NativeProcessStartupInfo = new NativeProcessStartupInfo();
var file:File = File.applicationDirectory.resolvePath("test.py");
nativeProcessStartupInfo.executable = file;
它们甚至包括test.py可能包含的内容:
#!/usr/bin/python
# ------------------------------------------------------------------------------
# Sample Python script
# ------------------------------------------------------------------------------
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)
问题是,据我所知,这根本不起作用。我尝试时遇到以下错误:
Error #3219: The NativeProcess could not be started. '%1 is not a valid Win32 application.
据推测,AIR(19.0)的最新版本不允许在没有" exe"的情况下执行任何操作。文件扩展名。以下代码似乎做了我想要的事情:
var nativeProcessStartupInfo:NativeProcessStartupInfo = new NativeProcessStartupInfo();
var file:File = new File("C:/Python/Python35/python.exe");
nativeProcessStartupInfo.executable = file;
nativeProcessStartupInfo.workingDirectory = File.applicationDirectory.resolvePath(".");
var processArgs:Vector.<String> = new Vector.<String>();
processArgs[0] = "test.py";
nativeProcessStartupInfo.arguments = processArgs;
这里的问题是双重的。首先,您需要知道可执行文件的绝对路径,我不能这样做。其次,代码不再是平台独立的。在Linux或Mac上,文件扩展名将是其他内容。
我想我可以通过要求%PYTHON_PATH%环境变量然后使可执行文件依赖于此来解决第一个问题。但是,我无法找到在ActionScript File对象中使用环境变量的方法。它有助于&#34;逃脱所有&#34;%&#34;在将某些内容发送到命令行之前的字符。
此时这个相当简单的问题变成了一个停滞不前的问题。有人可以帮我理解一种方法: