Использование os.system асинхронно, независимо от процесса Python? - PullRequest
1 голос
/ 24 августа 2011

При использовании os.system для открытия файла, например: os.system(r'C:/foo.txt'), текущий процесс Python, конечно, ждет, пока системный вызов не вернется. (т.е. текстовый редактор закрывается).
Нужно ли использовать поток, чтобы сделать это асинхронным?

Представьте себе следующую ситуацию:

Я пишу Файловый менеджер для Windows, используя Python. Пользователь нажимает на файл. Теперь с помощью os.system(the_path_to_the_file_clicked) откроется файл с программой по умолчанию, установленной в реестре.
Использование потока, чтобы сделать системный вызов асинхронным, работало бы довольно хорошо, но что, когда пользователь закрывает файловый менеджер? Процесс Python будет работать до тех пор, пока не завершится поток, но разве это не излишне? А с другой стороны, завершение Python-процесса также приведет к завершению потока, программа закроется.

Есть ли способ использовать системный вызов для открытия нового процесса, независимого от процесса Python?

1 Ответ

4 голосов
/ 24 августа 2011

Если вы хотите открыть файл в Windows с помощью программы по умолчанию, есть специальная функция, которая открывает его асинхронно и независимо от вашей собственной программы: os.startfile .Это должно делать то, что вы хотите.

В целом, для асинхронного запуска программ os.system не может это сделать.Однако модуль подпроцесса может.Модуль подпроцесса делает почти все, что делает os.system, плюс многое другое.Однако, как и в случае с os.system, когда вы используете subprocess.Popen, программа не открывается независимо от вашего процесса - когда ваш процесс умирает, так же как и подпроцесс.

...