我想从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
)。
答案 0 :(得分:0)
环境变量仅在进程和子进程中持久存在。你正在做的是产生一个子进程,设置路径环境变量,然后退出该进程,失去它的环境。
将所有内容放在批处理文件中是解决此问题的一种方法。您还可以使用子进程生成命令shell,然后通过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)