Python 等待os.system命令完成

Python 等待os.system命令完成,python,macos,shell,python-3.x,command-line,Python,Macos,Shell,Python 3.x,Command Line,我的python脚本遇到了一个问题。我正在使用Python3。我正在使用os.system功能在mac上打开一个应用程序。我想做的是让电脑打印“完成”时,它已经完成打开。问题是脚本在应用程序加载完成之前打印“完成”。应用程序开始启动,但脚本在应用程序完全启动之前打印“完成”。这是我的剧本: import os os.system('open "/Applications/Pages.app"') print("done.") Plz帮助 提前感谢代码实际工作正常。可以将open命令看作是启动

我的python脚本遇到了一个问题。我正在使用Python3。我正在使用os.system功能在mac上打开一个应用程序。我想做的是让电脑打印“完成”时,它已经完成打开。问题是脚本在应用程序加载完成之前打印“完成”。应用程序开始启动,但脚本在应用程序完全启动之前打印“完成”。这是我的剧本:

import os

os.system('open "/Applications/Pages.app"')
print("done.")
Plz帮助


提前感谢

代码实际工作正常。可以将open命令看作是启动打开过程的启动程序——比如启动汽车上的启动电机。Open将告诉你的应用程序打开,然后它返回,告诉你它是否已经成功启动。同时,你打开的应用程序将经历自己的初始化过程,直到完全启动


我不知道你怎么知道你的程序什么时候已经完全启动了,只是设置了一个任意秒数的计时器。通过查看计算机上的进程列表,您可能能够做出有根据的猜测?

代码实际工作正常。可以将open命令看作是启动打开过程的启动程序——比如启动汽车上的启动电机。Open将告诉你的应用程序打开,然后它返回,告诉你它是否已经成功启动。同时,你打开的应用程序将经历自己的初始化过程,直到完全启动


我不知道你怎么知道你的程序什么时候已经完全启动了,只是设置了一个任意秒数的计时器。您可以通过查看计算机上的进程列表进行有根据的猜测?

open
是一个命令,它将应用程序作为单独的任务运行。如果要等待完成,则必须直接在应用程序内运行可执行文件(.app只是目录的后缀)

但是你不想这么做:应用程序本身处理所有的加载,MacOS(可能,我实际上根本不知道操作系统是如何工作的)只是将所有的比特和字节从可执行文件复制到RAM中;然后,来自操作系统的调度程序运行它

有些应用程序直接打开窗口,但并非所有应用程序都这样做。这样做的调用有时会在一些库中运行,通常需要一段时间。因此,尝试测量打开窗口所需的时间也不起作用(应用程序也可能初始化其他东西;而且测量此类任务的时间无论如何都不是处理此类问题的好方法)

解决方案如下:如果该程序打开了一个窗口,您希望恢复,对吗?如果您知道流程的名称,则非常简单:

导入操作系统
导入子流程
devnull=open(os.devnull,'w')
script=”“”
告诉应用程序“系统事件”
将frontApp设置为名称为“{}”且frontmost为true的第一个应用程序进程
结束语
"""
...
而subprocess.check_调用([“osascript”、“-e”、script.format(“进程的名称”)),stdout=devnull,stderr=devnull)!=0:
通过
osascript
运行AppleScript“applications”,在本例中,该应用程序尝试使用您提供的名称获取进程,但必须在其顶部有一个窗口。我猜这是目录名,后面没有“.app”。如果未打开此应用程序,这将不起作用,留下非零退出代码(-1719),而如果打开此应用程序,则不会出现任何问题。变量被设置,脚本退出,留下0作为退出代码

如果您只想等待进程出现,请从
脚本
变量中的AppleScript代码中删除
和frontmost is true


我的代码在Mac上按预期工作,但它会打印到标准输出。

open
是一个命令,它将应用程序作为单独的任务运行。如果要等待完成,则必须直接在应用程序内运行可执行文件(.app只是目录的后缀)

但是你不想这么做:应用程序本身处理所有的加载,MacOS(可能,我实际上根本不知道操作系统是如何工作的)只是将所有的比特和字节从可执行文件复制到RAM中;然后,来自操作系统的调度程序运行它

有些应用程序直接打开窗口,但并非所有应用程序都这样做。这样做的调用有时会在一些库中运行,通常需要一段时间。因此,尝试测量打开窗口所需的时间也不起作用(应用程序也可能初始化其他东西;而且测量此类任务的时间无论如何都不是处理此类问题的好方法)

解决方案如下:如果该程序打开了一个窗口,您希望恢复,对吗?如果您知道流程的名称,则非常简单:

导入操作系统
导入子流程
devnull=open(os.devnull,'w')
script=”“”
告诉应用程序“系统事件”
将frontApp设置为名称为“{}”且frontmost为true的第一个应用程序进程
结束语
"""
...
而subprocess.check_调用([“osascript”、“-e”、script.format(“进程的名称”)),stdout=devnull,stderr=devnull)!=0:
通过
osascript
运行AppleScript“applications”,在本例中,该应用程序尝试使用您提供的名称获取进程,但必须在其顶部有一个窗口。我猜这是目录名,后面没有“.app”。如果未打开此应用程序,这将不起作用,留下非零退出代码(-1719),而如果打开此应用程序,则不会出现任何问题。变量被设置,脚本退出,留下0作为退出代码

如果您只想等待进程出现,请删除