Выполнение команды DevCon CMD из python

Я хочу перезапустить драйвер с DevCon из скрипта Python. Это работает из командной строки с этой командой:

devcon restart \"sd0007322081041363_kcanv\"

Я попробовал это:

os.system("devcon restart \"sd0007322081041363_kcanv\"")

с результатом:

'devcon' is not recognized as an internal or external command

Я прочитал, что os.system устарела, и мне нужно использовать subprocess.check_output, поэтому я пытаюсь это:

subprocess.check_output(['devcon', 'restart', '"sd0007322081041363_kcanv"'])

с результатом:

WindowsError:[Error 2] The system cannot find the file specified

и это:

subprocess.check_output('devcon restart "sd0007322081041363_kcanv"', shell=True)

с результатом:

subprocess.CalledProcessError: Command 'devcon restart "sd0007322081041363_kcanv"' returned non-zero exit status 1

и это:

subprocess.Popen("devcon restart \"sd0007322081041363_kcanv\"", shell=True, stdout=subprocess.PIPE).stdout.read()

результат:

'devcon' is not recognized as an internal or external command

и это:

try:
    subprocess.check_output('devcon disable "sd0007322081041363_kcanv" /f',shell=True,stderr=subprocess.STDOUT)
except subprocess.CalledProcessError as e:
    raise RuntimeError("command '{}' return with error (code {}): {}".format(e.cmd, e.returncode, e.output))

с результатом:

RuntimeError: command 'devcon disable "sd0007322081041363_kcanv" /f' return with errpr (cpde 1): 'devcon' is not recognized as an internal or external command, operable program or batch file

Файл devcon.exe находится в Windows/System32 и задан в системном пути.

Я знаю, что это может быть повторяющимся вопросом, но я пробовал много решений на stackru, но я не смог решить эту проблему.

1 ответ

Решение

Наконец-то я придумал решение. Я перепробовал много вещей, но вот что работает для меня:

  1. скопируйте devcon.exe из C:\Windows\System32 и поместите его в C:\Windows\SysWOW64.

  2. мой код:

    try:
        subprocess.check_output('C:\\Windows\\SysWOW64\\devcon.exe restart "sd0007322081041363_kcanv" /f',shell=True,stderr=subprocess.STDOUT)
    except subprocess.CalledProcessError as e:
        raise RuntimeError("command '{}' return with error (code {}): {}".format(e.cmd, e.returncode, e.output))
    
Другие вопросы по тегам