<p>有问题的错误,评论倾向于指出这样一个事实:这里发布的代码很有可能不是您运行的代码(可能已经过时了?)。在</p>
<p>无论如何,运行您的<strong>精确的</strong>代码(保存在名为<em>的文件中)代码.py</em>)产量:</p>
<blockquote>
<pre class="lang-py prettyprint-override"><code>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.
</code></pre>
</blockquote>
<p>没有太多有用的信息。<br/>但是<em>check_output</em>只是一个方便的包装器,在当前的情况下,它对我们不利。有关详细信息,请选中<a href="https://docs.python.org/3/library/subprocess.html#module-subprocess" rel="nofollow noreferrer">[Python 3]: subprocess - Subprocess management</a>。<br/>所以我修改了你的代码。在</p>
<p><em>代码.py</em>:</p>
<pre class="lang-py prettyprint-override"><code>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()))
</code></pre>
<p>这次的输出是:</p>
<blockquote>
<pre class="lang-py prettyprint-override"><code>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:
</code></pre>
</blockquote>
<p>现在,可以看到<em>PS</em>(<em>powershell</em>)命令<strong>运行尝试已成功运行</strong>,但命令本身,<strong>失败</strong>。因此,在<em>子进程</em>(和<em>Python</em>)方面(在使用<em>check廕u output</em>时,这一点并不十分清楚),问题就在<em>PS</em>一侧。在</p>
<p>万一我的备份失败了。但不管怎样,从这里看来,它更像是一个系统管理任务。在</p>