python - 从 python 运行 vssadmin

标签 python windows subprocess 32bit-64bit popen

我正在尝试为自己编写一个简单的脚本来删除 Windows 还原点,我尝试使用 os 模块,然后使用 os.system 但它说 vssadmin 无法识别,另外,我尝试使用 subprocess,然后与 cmd 进行通信,但是我无法沟通两次,我不知道为什么。

有没有办法在 cmd 中运行 Python 中的以下脚本?

它将删除所有系统还原点的所有阴影,然后询问我是否要执行此操作。

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. 您正在使用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'])

关于python - 从 python 运行 vssadmin,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60237722/

相关文章:

windows - glext.h 的问题

python - Conemu - 重用实例,但不将其带到前台

python - 计算字典 pandas 列中的项目

python - Django 如何决定模型中的哪些内容将被分配 _id?

python - 无法导入 Pytorch [WinError 126] 找不到指定的模块

asynchronous - 如何异步处理子进程的 I/O?

python - 使用 pytables,哪个更有效 : scipy. 稀疏矩阵或 numpy 密集矩阵?

xml - 在 Windows 上使用包 XML 时发生内存泄漏

python - 使用环境变量在python中调用子进程

python - 为什么线程比子进程慢?我什么时候应该使用子进程代替线程,反之亦然