使osascript以交互方式/实时打印标准输出

Make osascript print stdout interactively / in real-time

好的,所以我有这个非常简单的 python 脚本:

import time
import sys

for i in range(25):
    time.sleep(1)
    print(i)

sys.exit()

当我使用 python 到 运行 时 (/usr/local/bin/python3.6 testscript.py),一切正常,输出为:

1
2
3
4
etc..

每个数字相继打印 1 秒。

然而当我运行:

/usr/bin/osascript -e 'do shell script "/usr/local/bin/python3.6 testscript.py" with prompt "Sart Testing " with administrator privileges'

25 秒没有任何输出,最后打印:

24

到航站楼。

问题是:如何让 osascript 打印出与我直接 运行 Python 脚本时完全相同的输出?

AppleScript 的do shell script命令运行在non-interactiveshell中, 所以你不能像你那样执行 osascript 命令 并期望它输出与 运行 宁 python script 通过 python 或直接 运行。换句话说,直接添加 python shebang 并使文件可执行,因此 Terminal 中的 ./testscript.py 就是全部你需要。或者使用 Terminal 及其 do script commandosascript.

python代码另存为。例如:

#!/usr/local/bin/python3.6

import time
import sys

for i in range(25):
    time.sleep(1)
    print(i)

sys.exit()

使其可执行:

chmod u+x testscript.py

运行 它在终端中:

./testscript.py

或者:

osascript -e 'tell app "Terminal" to do script "/path/to/testscript.py"'

或者没有 shebangpython code 并且在使用 Terminal 的 do script 命令:

osascript -e 'tell app "Terminal" to do script "/usr/local/bin/python3.6 /path/to/testscript.py"'