使用Python设置Windows PATH并调用多个命令

时间:2016-02-29 01:15:19

标签: python

我想从Python执行以下Windows 7命令:

SET PATH=%PATH%;C:\Qt\Qt5.5.1\5.5\mingw492_32\bin;C:\Qt\Qt5.5.1\Tools\mingw492_32\bin

C:\Qt\Qt5.5.1\5.5\mingw492_32\bin\qmake untitled5.pro
C:\Qt\Qt5.5.1\Tools\mingw492_32\bin\mingw32-make
C:\Qt\Qt5.5.1\Tools\mingw492_32\bin\mingw32-make clean

我试过了:

os.system("SET PATH=%PATH%;C:\\Qt\\Qt5.5.1\\5.5\\mingw492_32\\bin;C:\\Qt\\Qt5.5.1\\Tools\\mingw492_32\\bin")
os.system("qmake untitled5.pro")
os.system("mingw32-make.exe")
os.system("mingw32-make clean")

但得到了:

'qmake' is not recognized as an internal or external command,
operable program or batch file.

'mingw32-make.exe' is not recognized as an internal or external command,
operable program or batch file.

'mingw32-make' is not recognized as an internal or external command,
operable program or batch file.

似乎PATH没有改变。有人会提出一个想法吗?

如果我将这些命令放在cmd.bat中,然后调用os.system("cmd.bat")就行了。但我不想创建这个额外的文件(cmd.bat)。

2 个答案:

答案 0 :(得分:0)

环境变量仅在进程和子进程中持久存在。你正在做的是产生一个子进程,设置路径环境变量,然后退出该进程,失去它的环境。

将所有内容放在批处理文件中是解决此问题的一种方法。您还可以使用子进程生成命令shell,然后通过stdin管道命令。

请参阅:How do I write to a Python subprocess' stdin?

答案 1 :(得分:0)

subprocess中的许多命令允许您传递用于子进程的环境。您可以复制环境,更改所需内容,然后执行命令。您甚至可以从头开始创建环境,以便当前环境中没有任何内容会弄乱您所调用的内容。这是一个例子

import os
import subprocess as subp

environ = os.environ.copy()
environ['PATH'] = os.pathsep.join(environ['PATH'], 
    ["C:\\Qt\\Qt5.5.1\\5.5\\mingw492_32\\bin",
    "C:\\Qt\\Qt5.5.1\\Tools\\mingw492_32\\bin"])

subp.call(["qmake", "untitled5.pro", env=environ)
subp.call(["mingw32-make.exe"], env=environ)
subp.call(["mingw32-make", "clean"], env=environ)