如何在automator中查看脚本运行的stdout

时间:2014-03-20 00:18:35

标签: python macos shell automator

我有一个python脚本,我希望能够将文件拖放到。所以我把它包装在Automator应用程序中。所述应用程序具有单个Run Shell Script,其内容类似于:

export PATH=${PATH}:/usr/local/bin:/usr/local/CrossPack-AVR/bin
cd /Applications/MyApp
/Applications/MyApp/doIt.py "$1"

这很有效。我的python脚本在$1中显示sys.argv[1]时运行。所述脚本虽然产生了相当多的输出。我想打开一些显示输出的窗口。我不介意用户是否必须关闭它。我Automator的行动中没有看到任何内容。我试过做类似的事情:

open -a Terminal /Applications/MyApp/doIt.py "$1"

不幸的是,这似乎并没有继承环境。它也没有将$1传递给python脚本,但也尝试打开它。

所以我正在寻找一种方法,打开某些东西(终端或其他),它可以捕获并滚动该脚本运行时的stdout,这是从脚本中调用的。

2 个答案:

答案 0 :(得分:5)

在Automator中,参数和变量可以使用特殊变量传递:

   $@

要从Automator中运行的脚本或任务获取输出,您可以单击脚本下方的结果(隐藏按钮)以查看任何输出。此外,您可以设置另一个bash脚本以将输出传递给stdout或您选择的任何其他位置。

此示例显示了一个将输出和变量发送到bash脚本的python脚本。您可以将输入作为参数传递,也可以传递给stdin:

automator

答案 1 :(得分:3)

我不在我的Mac上,所以这是未经测试的,但我很确定它可以用于少量编辑......

更改您的脚本,使其看起来像这样,您的python脚本在后台运行,将其输出保存到临时文件$$.tmp,其中$$是您的进程ID(pid):

export PATH=${PATH}:/usr/local/bin:/usr/local/CrossPack-AVR/bin
cd /Applications/MyApp
/Applications/MyApp/doIt.py "$1" > $$.tmp &

现在在最后添加以下行,以便1)创建一个脚本来记录日志文件,2)使其可执行,3)执行它:

echo "tail -f $$.tmp" > x.command
chmod +x x.command
open x.command

我建议将x.command重命名为$$.command,以便您可以从多个用户多次运行它,而无需各个用户之间的互动。您还应该在使用后清理并删除临时文件。