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

Tra*_*ggs 4 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"
Run Code Online (Sandbox Code Playgroud)

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

open -a Terminal /Applications/MyApp/doIt.py "$1"
Run Code Online (Sandbox Code Playgroud)

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

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

l'L*_*L'l 5

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

   $@
Run Code Online (Sandbox Code Playgroud)

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

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

自动机


Mar*_*ell 4

我不在我的 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 &
Run Code Online (Sandbox Code Playgroud)

现在在末尾添加以下行,以便您 1) 创建一个跟踪日志文件的脚本,2) 使其可执行,3) 执行它:

echo "tail -f $$.tmp" > x.command
chmod +x x.command
open x.command
Run Code Online (Sandbox Code Playgroud)

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