使用Javascript的Adobe Air2 NativeProcess API
我正在尝试通过Javascript使用NativeProcess API来启动一个python脚本。在Adobe AIR API参考文档中,我找到了一个不错的示例,但它并没有成功。我查了很多其他的例子,还是找不到解决办法。
这是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 supported.”
谢谢你的帮助。
这是我对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
如果你运行你的程序,下面就是输出的内容:
test.py
HI FROM PYTHON
Enter user name
这段Python代码是在寻找标准输入,并将结果写入标准输出。我觉得如果不从命令行运行,这可能是做不到的。
那我们试试去掉:
line = sys.stdin.readline()
sys.stdout.write("hello," + line)
然后做一些无害的Python表达式,比如
a = 1+4
看看这样是否能正常工作。我有种感觉,这可能是个问题。