如何查看在自动化程序中运行的脚本的标准输出

5 投票
2 回答
7666 浏览
提问于 2025-04-17 23:03

我有一个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脚本,而是试图直接打开它。

所以我在寻找一种方法,能够打开一个东西(比如终端或其他的),可以在脚本运行时捕捉并滚动显示它的输出。

2 个回答

5

在Automator中,可以通过一个特殊的变量来传递参数和变量:

   $@

如果你想查看在Automator中运行的脚本或任务的输出,可以点击脚本下方的结果按钮(凹进去的按钮),这样就能看到任何输出了。此外,你还可以设置另一个bash脚本,把输出传递到标准输出(stdout)或者你选择的其他地方。

这个例子展示了一个python脚本是如何把输出和变量传递给一个bash脚本的。你可以把输入作为参数传递,或者传递给标准输入(stdin):

automator

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 &

现在在最后加上以下几行,这样你就可以 1) 创建一个脚本来监控你的日志文件,2) 让它可以执行,3) 然后执行它:

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

我建议把 x.command 改名为 $$.command,这样你就可以让多个用户同时运行,而不会互相干扰。你还应该在使用完后清理并删除临时文件。

撰写回答