Ошибки, о которых идет речь, комментарии, как правило, указывают на тот факт, что есть большой шанс , что размещенный здесь код не тот, который вы запускаете (может быть, он устарел?).
В любом случае, выполнение вашего точного кода (сохраненного в файле с именем code.py ) приводит к:
e:\Work\Dev\StackOverflow\q054334592>"e:\Work\Dev\VEnvs\py_064_03.06.08_test0\Scripts\python.exe" code.py
Traceback (most recent call last):
File "code.py", line 4, in <module>
output = subprocess.check_output(["powershell", command], timeout=120)
File "c:\Install\x64\Python\Python\03.06.08\Lib\subprocess.py", line 356, in check_output
**kwargs).stdout
File "c:\Install\x64\Python\Python\03.06.08\Lib\subprocess.py", line 438, in run
output=stdout, stderr=stderr)
subprocess.CalledProcessError: Command '['powershell', 'wbadmin get versions']' returned non-zero exit status 1.
Не слишком много полезной информации.
Но check_output - это просто удобная оболочка, которая в данном случае работает против нас. Для получения более подробной информации, проверьте [Python 3]: подпроцесс - Управление подпроцессом .
Итак, я изменил ваш код.
code.py
import subprocess
ps_args = "wbadmin get versions"
cmd = ["powershell", *ps_args.split(" ")] # It works with your way too (["powershell", ps_args]), I'm just being rigorous
print("Popen arguments: {:}".format(cmd))
proc = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
out, err = proc.communicate(timeout=120)
print("\nProcess terminated with exit code: {:}".format(proc.returncode))
print("\nSTDOUT:\n{:}\n".format(out.decode()))
print("STDERR:\n{:}\n".format(err.decode()))
На этот раз вывод:
e:\Work\Dev\StackOverflow\q054334592>"e:\Work\Dev\VEnvs\py_064_03.06.08_test0\Scripts\python.exe" code.py
Popen arguments: ['powershell', 'wbadmin', 'get', 'versions']
Process terminated with exit code: 1
STDOUT:
wbadmin 1.0 - Backup command-line tool
(C) Copyright Microsoft Corporation. All rights reserved.
ERROR - No backup was found.
STDERR:
Теперь видно, что команда PS ( powershell ) попытка запуска была успешно выполнена , но сама команда не удалась, Итак, все хорошо на стороне подпроцесса (и Python ) (факт, который не совсем понятен при использовании check_output ), и проблема в PS сторона.
В моем случае у меня нет резервных копий, поэтому ожидается сбой. Но в любом случае отсюда это больше похоже на задачу системного администратора.