当使用os.system
打开文件时,例如:os.system(r'C:/foo.txt')
,当前的Python进程当然会等到系统调用返回。 (即:文本编辑关闭)
我是否必须使用Thread来使其异步?
想象一下以下情况:
我正在使用Python编写Windows文件管理器。用户单击文件。现在使用os.system(the_path_to_the_file_clicked)
将使用默认程序打开文件,如注册表中所设置的那样
使用Thread来使系统调用异步可以很好地工作,但是当用户关闭文件管理器时呢? Python进程将保持活动直到线程退出,但这不是不必要的吗?另一方面,终止Python进程也将终止Thread,程序关闭。
有没有办法使用系统调用来打开一个独立于Python进程的新进程?
答案 0 :(得分:4)
如果您想使用默认程序在Windows上打开文件,则会有一个特殊的功能,它可以独立于您自己的程序打开它:os.startfile。这应该做你想要的。
更一般地说,为了异步运行程序,os.system
无法执行此操作。但是,the subprocess module可以。子进程模块几乎完成了os.system
所做的一切,还有更多。但是,与os.system一样,当您使用subprocess.Popen时,程序不会独立于您的进程打开 - 当您的进程终止时,子进程也会死。