subprocess.call - безкрайно чакане командата да завърши

Исках да получа информация за картата за показване на Windows чрез 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)


подпроцесът може да стартира само други процеси. Той не може да каже на тези други процеси какво да правят с това (освен да ви позволи да предавате данни през STDIN).

dxdiag генерира този диалогов прозорец вътрешно, извън сферата на контрол на подпроцеса.

Единственият начин да го спрете надеждно е да разберете какъв диалогов прозорец се появява и да намерите флаг, специфичен за dxdiag, за да деактивирате този диалог (ако има такъв).

person Spikes    schedule 24.02.2014