擅长:python、mysql、java
<p>这是因为子进程可以在两种模式下工作:要么是作为参数传递的元组指定的进程,要么是使用shell执行字符串。区别在于<code>shell</code>参数。所以你可能想做的是:</p>
<pre><code>command = "sleep 10 && sudo /etc/init.d/tractor-blade restart"
p = subprocess.Popen(command, stdout=subprocess.PIPE, shell=True, stderr=subprocess.STDOUT)
</code></pre>
<p>或:</p>
<pre><code>time.sleep(10)
command = ['sudo', '/etc/init.d/tractor-blade', 'restart' '&']
subprocess.Popen(command, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
</code></pre>
<p>从<a href="https://docs.python.org/2/library/subprocess.html#subprocess.Popen" rel="noreferrer">documentation</a>:</p>
<blockquote>
<p><em>The shell argument (which defaults to False) specifies whether to use the shell as the program to execute. If shell is True, it is recommended to pass args as a string rather than as a sequence.</em></p>
</blockquote>