subprocess.call - бесконечное ожидание завершения команды

Я хотел получить информацию о карте дисплея в окнах через dxdiag, поэтому я использовал следующий код:

import os, sys, subprocess

b = open(os.environ["TMP"] +"\\dx_info.bat", "w")
cmd = r'''@ECHO OFF
SETLOCAL
dxdiag /x dx_temp.xml
DEL "%~f0"'''
b.write(cmd)
b.close()

os.chdir(os.environ["TMP"])

subprocess.call([os.environ["TMP"] +"\\dx_info.bat"])

этот скрипт создает bat-файл в %Temp%, затем запускает его и ждет завершения команды и создания dx_temp.xml. Но на некоторых ПК после запуска dxdiag диалоговое окно подсказки останавливает выполнение команды. В этой ситуации происходит бесконечное ожидание завершения команды. Как я могу заставить subprocess.call пропустить все эти подсказки?

Python 2.7.6 в Windows 8


person Community    schedule 24.02.2014    source источник
comment
несвязанный: subprocess.call(cmd, shell=True, cwd=tempfile.gettempdir()) тоже может работать (без временных файлов и chdir())   -  person jfs    schedule 24.02.2014


Ответы (1)


subprocess может только запускать другие процессы. Он не может сказать этим другим процессам, что с этим делать (помимо того, что вы можете передавать данные через STDIN).

dxdiag генерирует эти диалоги внутри, вне сферы контроля подпроцесса.

Единственный способ надежно остановить это — выяснить, какое диалоговое окно появляется, и найти флаг, специфичный для dxdiag, чтобы отключить этот диалог (если он существует).

person Spikes    schedule 24.02.2014