Запуск вссадмина от python - PullRequest
       75

Запуск вссадмина от python

3 голосов
/ 15 февраля 2020

Я пытаюсь написать для себя простой скрипт, который удалит Windows точек восстановления, я попытался использовать модуль os, а затем os.system, но там написано vssadmin is not recognized, также я пытался использовать subprocess и затем communicate с cmd, но я не могу communicate дважды, я не знаю почему.

Есть ли способ запустить следующий скрипт в Python в cmd?

Он удалит все, удалит все тени точек восстановления системы, а затем спросит меня, хочу ли я это сделать.

vssadmin delete shadows /all
y

Первый пример:

Это выдаст мне ошибку, потому что я пытаюсь связаться с командной строкой дважды.

import subprocess

proc = subprocess.Popen('cmd.exe', stdin = subprocess.PIPE, stdout = subprocess.PIPE)
proc.communicate('vssadmin delete shadows /all'.encode())
proc.communicate('y'.encode())

Второй пример:

Он не распознает мой код.

import os

os.system('vssadmin delete shadows /all')
os.system('y')

1 Ответ

0 голосов
/ 28 февраля 2020

Ваш код имеет несколько проблем:

  1. Вы используете communicate вместо stdin.write
  2. Вы пишете 'y' вместо 'y\n'
  3. Вы используете vssadmin вместо c:\Windows\Sysnative\vssadmin.exe (vssadmin - это 32-битное приложение, и вы, вероятно, используете 64-битное python)
  4. Использование stdin для связи, вероятно, не будет работать в любом случае , просто используйте флаг /quiet

Следующий код может помочь вам достичь лучших результатов:

import subprocess
subprocess.Popen([r'c:\Windows\Sysnative\vssadmin.exe', 'delete', 'shadows', '/all', '/quiet'])
...