擅长:python、mysql、java
<p>有一个使用python的解决方案子流程.运行()而不是QProcess。在</p>
<p>在子流程.运行(),可以使用<code>env</code>参数指定一组环境变量(实际上是字典)。其思想是获取原始环境的副本,修改PATH变量,并将修改后的环境传递给子流程.运行,如下所示:</p>
<pre><code>env = os.environ.copy()
env['PATH'] = "C:\\Users\\Kristof\\programs\\openocd_0.10.0\\bin" \
+ os.pathsep + env['PATH']
subprocess.run("openocd", env=env)
</code></pre>
<p>这仍然不起作用:剩下的问题是环境(包括修改后的PATH变量)将在子进程中可用,但不用于搜索openocd命令。但这很容易解决:子流程.运行还有一个boolean <code>shell</code>参数(默认为False),它告诉它在shell中运行命令。由于shell将在子进程中运行,它将使用修改后的路径来搜索openocd。所以工作代码是:</p>
^{pr2}$
<p>shell=True的另一种方法是使用舒蒂尔,哪个(在Python>;=3.3中可用)来解析该命令。当命令以字符串列表而不是单个字符串的形式给出时,这也将可靠地工作。在</p>
<pre><code>env = os.environ.copy()
env['PATH'] = "C:\\Users\\Kristof\\programs\\openocd_0.10.0\\bin" \
+ os.pathsep + env['PATH']
command = shutil.which("openocd", path = self.env.get('PATH', None))
subprocess.run([ command ], env=env)
</code></pre>