使用os.system异步,独立于python进程?

Nik*_*s R 2 python asynchronous system process

当使用os.system打开文件时,例如:os.system(r'C:/foo.txt'),当前的Python进程当然会等待系统调用返回。(即:文本编辑器关闭)。
我必须使用线程来使其异步吗?

想象一下以下情况:

我正在使用 Python 为 Windows 编写一个文件管理器。用户单击一个文件。现在使用os.system(the_path_to_the_file_clicked)将使用注册表中设置的默认程序打开文件。
使用线程使系统调用异步可以很好地工作,但是当用户关闭文件管理器时怎么办?Python 进程将一直保持活动状态,直到线程退出,但这不是不必要的吗?另一方面,终止 Python 进程也会终止线程,程序将关闭。

有没有办法使用系统调用来打开一个独立于Python进程的新进程?

Dev*_*rre 5

如果您想使用默认程序在 Windows 上打开文件,有一个特殊的函数可以独立于您自己的程序异步打开它:os.startfile。这应该做你想做的。

更一般地,对于异步运行程序,os.system无法做到这一点。然而,子流程模块可以。subprocess 模块几乎可以os.system完成所有功能,甚至更多。但是,与 os.system 一样,当您使用 subprocess.Popen 时,该程序不会独立于您的进程而打开 - 当您的进程终止时,子进程也会终止。

  • +1:`os.system()`几乎从来都不是您想要的,`subprocess`通常正是您想要的。 (2认同)