1. 问题背景
在 AIR 1.5 中,无法直接调用系统命令或运行可执行文件(如 Python 解释器)。
2. 解决方案
由于安全限制,AIR 应用程序无法直接调用系统命令或运行可执行文件。因此,以下解决方案仅适用于能够共享详细信息的情况:
1)编写一个本机扩展程序(ANE)以调用 Python:ANE 是本机库,可用于从 AIR 应用程序调用系统命令或运行可执行文件。您可以使用 C/C++、Java 或 Objective-C 编写 ANE。
2)使用 CommandProxy 演示:CommandProxy 演示是一个示例项目,演示如何从 AIR 应用程序调用系统命令。它使用 C++ 编写的 ANE,但您可以根据需要修改它。
以下是一些可能的替代方案:
· 使用 JavaScript 或 ActionScript 编写脚本,而不是 Python。
· 将 Python 脚本转换为 AIR 应用程序。
· 使用其他语言(如 C/C++ 或 Java)编写可执行文件,然后从 AIR 应用程序调用该可执行文件。
代码例子:
// CommandProxyANE.cpp
#include <stdio.h>
#include "CommandProxyANE.h"
FREObject CommandProxyANE_callCommand(FREContext ctx, void* funcData, uint32_t argc, FREObject argv[]) {
if (argc < 1) {
return FRE_INVALID_ARGUMENT;
}
FREObject resultObject;
FRENewObjectFromUTF8(0, (const uint8_t*)"result", &resultObject);
FREByteArray byteArray;
FREGetObjectAsByteArray(argv[0], &byteArray);
int length = byteArray.length;
char* command = new char[length + 1];
FREAcquireByteArray(byteArray, (uint8_t*)command, &length);
command[length] = '\0';
FILE* pipe = popen(command, "r");
if (pipe == NULL) {
return FRE_INVALID_ARGUMENT;
}
char buffer[1024];
while (fgets(buffer, sizeof(buffer), pipe)) {
FREObject outputObject;
FRENewObjectFromUTF8(0, (const uint8_t*)buffer, &outputObject);
FREArrayAppend(resultObject, outputObject);
}
pclose(pipe);
return resultObject;
}
void CommandProxyANE_ContextInitializer(void* extData, const uint8_t* ctxType, FREContext ctx, uint32_t* numFunctionsToTest, const FRENamedFunction** functionsToSet) {
*numFunctionsToTest = 1;
functionsToSet[0].name = (const uint8_t*)"callCommand";
functionsToSet[0].functionData = NULL;
functionsToSet[0].function = CommandProxyANE_callCommand;
}
void CommandProxyANE_ExtInitializer(void** extDataToSet, FREContextInitializer* ctxInitializerToSet, FREContextFinalizer* ctxFinalizerToSet) {
*extDataToSet = NULL;
*ctxInitializerToSet = CommandProxyANE_ContextInitializer;
*ctxFinalizerToSet = NULL;
}
```python
```python
// CommandProxyANE.xml
<?xml version="1.0" encoding="UTF-8"?>
<extension xmlns="http://ns.adobe.com/air/extension/1.0">
<id>com.example.commandproxy</id>
<version>1.0</version>
<name>Command Proxy</name>
<description>A sample extension that allows you to call system commands from an AIR application.</description>
<author>Example Company</author>
<authorURL>http://example.com</authorURL>
<engine>AIR</engine>
<engineVersion>1.5</engineVersion>
<engines>
<engine>AIR</engine>
<version>1.5</version>
</engines>
<platforms>
<platform>Windows</platform>
<platform>Macintosh</platform>
<platform>Linux</platform>
</platforms>
<locales>
<locale>en_US</locale>
</locales>
<content>
<applicationEntryPoint>CommandProxyANE.ane</applicationEntryPoint>
<initializer>CommandProxyANE.ExtInitializer</initializer>
</content>
</extension>
以上解决方案仅适用于能够共享详细信息的情况。如果您无法共享详细信息,则无法直接从 AIR 应用程序调用 Python 脚本。
本文内容不用于商业目的,如涉及知识产权问题,请权利人联系51Testing小编(021-64471599-8017),我们将立即处理