使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
command 和 osascript
.
将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"'
或者没有 shebang 的 python
code 并且在使用 Terminal 的 do script
命令:
osascript -e 'tell app "Terminal" to do script "/usr/local/bin/python3.6 /path/to/testscript.py"'
好的,所以我有这个非常简单的 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
command 和 osascript
.
将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"'
或者没有 shebang 的 python
code 并且在使用 Terminal 的 do script
命令:
osascript -e 'tell app "Terminal" to do script "/usr/local/bin/python3.6 /path/to/testscript.py"'