如何查看在自动化程序中运行的脚本的标准输出
我有一个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 个回答
在Automator中,可以通过一个特殊的变量来传递参数和变量:
$@
如果你想查看在Automator中运行的脚本或任务的输出,可以点击脚本下方的结果按钮(凹进去的按钮),这样就能看到任何输出了。此外,你还可以设置另一个bash脚本,把输出传递到标准输出(stdout)或者你选择的其他地方。
这个例子展示了一个python脚本是如何把输出和变量传递给一个bash脚本的。你可以把输入作为参数传递,或者传递给标准输入(stdin):
我现在不在我的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
,这样你就可以让多个用户同时运行,而不会互相干扰。你还应该在使用完后清理并删除临时文件。