File.execute()没有执行我的脚本。如何调试此问题?

时间:2013-12-31 20:26:29

标签: adobe-illustrator extendscript

我正在为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.existsresult都是true,表示脚本启动正常。但是脚本似乎根本没有运行。我尝试了以下诊断:

  • Ruby脚本从命令行成功运行。该脚本的权限为-rwxr-xr-x
  • 我添加了对system("touch /blah/blah/blah")的调用作为Ruby脚本的第一行。该文件没有被触及。
  • 我想也许ExtendScript进程在Ruby脚本运行之前就已经终止了,所以我在rubyFile.execute()之后添加了一个long for循环。 <旋转> 30秒没有帮助。

如何调试或解决此问题?

我在使用MacOS X v10.9.1。作为参考,这是File.execute()的文档:

  

File.execute():Boolean

     

核心JavaScript类

     

执行或打开   这个文件使用适当的应用程序,就像它一样   双击文件浏览器。您可以使用此方法运行   脚本,启动应用程序等。如果是,立即返回true   应用程序启动成功。

1 个答案:

答案 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。