我正在为ExtendScript编写Illustrator CS6的脚本。在我的脚本结束时,我想使用File.execute()
生成一个任务(Ruby中的第二个脚本)。但是,它不起作用。我对如何调试问题感到茫然 - 我怎么能弄清楚为什么这不起作用?
这是我的ExtendScript文件的结尾:
// Do a bunch of other work, then:
var rubyFile = new File(scriptFolder + 'BuildHtmlWalkthrough.rb');
alert(rubyFile.exists);
var result = rubyFile.execute();
alert(result);
rubyFile.exists
和result
都是true,表示脚本启动正常。但是脚本似乎根本没有运行。我尝试了以下诊断:
-rwxr-xr-x
system("touch /blah/blah/blah")
的调用作为Ruby脚本的第一行。该文件没有被触及。rubyFile.execute()
之后添加了一个long for循环。 <旋转> 30秒没有帮助。如何调试或解决此问题?
我在使用MacOS X v10.9.1。作为参考,这是File.execute()
的文档:
File.execute():Boolean
核心JavaScript类
执行或打开 这个文件使用适当的应用程序,就像它一样 双击文件浏览器。您可以使用此方法运行 脚本,启动应用程序等。如果是,立即返回true 应用程序启动成功。
答案 0 :(得分:5)
它可能正在“使用适当的应用程序打开此文件”而不是执行,并返回true,因为文件已成功打开(或已在其关联的应用程序中打开)。如果我有一个python脚本并执行
f= new File("~/Documents/misc_scripts/getpixelrgb.py");
f.execute();
,它在我的脚本编辑器中打开它,即使设置了文件的执行标志。
我在OSX上,顺便说一下
在After Effects中,有system.callSystem()来执行命令行命令,但我担心在Illustrator中不存在(我假设你因为标记而为Illustrator做这个)。你是OSX还是Windows?通过制作可执行的.app(OSX)或.exe(Win)并使用execute()调用它,可以解决这个问题。如果我这样做,我在OSX上,我会制作一个AppleScript应用程序,它可以执行“执行shell脚本”来进行ruby系统调用。在Windows上,它是不同的。如果你在windows上,你可能会喜欢一种解决方案:ocra,这是特定于ruby的(http://ocra.rubyforge.org/)。可以在Windows上运行调用ruby脚本的.bat文件,但我不确定。
<强> [编辑!] 强>
非常抱歉无关的Windows信息(对于其他人,我猜)。刚刚看到你关于在OSX上的说明。所以你可能想要使用AppleScript解决方案。
[再次编辑]
所以,如果我的ruby脚本(“test.rb”)是:
#!/usr/bin/env ruby
print "Hello"
我的AppleScript是:
do shell script "cd /testing_folder/; ruby test.rb"
然后我在AppleScript中返回“Hello”,但ExtendScript将返回true。