【问题标题】:File.execute() is not executing my script. How to debug this issue?File.execute() 没有执行我的脚本。如何调试这个问题?
【发布时间】:2014-01-01 05:43:11
【问题描述】:

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

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

我可以做些什么来调试或解决这个问题?

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

File.execute(): 布尔值

核心 JavaScript 类

执行或打开 该文件使用适当的应用程序,就好像它已经 在文件浏览器中双击。您可以使用此方法运行 脚本、启动应用程序等。如果立即返回 true 应用启动成功。

【问题讨论】:

    标签: adobe-illustrator extendscript


    【解决方案1】:

    它可能正在执行“使用适当的应用程序打开此文件”而不是执行,并返回 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。

    【讨论】:

    • 是否有将参数/选项传递给脚本/可执行文件?
    • @SyntheCypher 传递参数的解决方法是创建另一个文件,该文件使用参数调用此脚本。例如。如果我有一个接受两个参数的脚本“abc.sh”,我将通过 Extendsript 创建另一个脚本“xyz.sh”,其内容为:abc.sh arg1 arg2,并在此文件上调用执行。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-11
    • 2021-07-17
    • 2012-03-29
    • 2019-12-03
    • 1970-01-01
    • 2017-01-21
    相关资源
    最近更新 更多