更新:当我使用subprocess.call而不是subprocess.Popen,问题解决了 - 有人知道是什么原因?还有另一个问题:我似乎无法找到控制输出的方法......有没有办法将输出重定向subprocess.call到字符串或类似的东西?谢谢!
我正在尝试使用它Devenv来构建项目,当我在命令提示符下键入它时它运行得很好devenv A.sln /build "Debug|Win32"- 但是当我使用python运行它时使用的Popen(cmd,shell=true)地方cmd与上面的行相同,它什么也没显示.如果我删除|它,"Debug"只更改它,它的工作....
有人知道为什么会这样吗?我以前尝试\过|,但仍然没有发生任何事情..
这是我正在使用的代码:
from subprocess import Popen, PIPE
cmd = ' "C:\\Program Files\\Microsoft Visual Studio 8\\Common7\\IDE\\devenv" solution.sln /build "Debug|Win32" '
sys.stdout.flush()
p = Popen(cmd,shell=True,stdout=PIPE,stderr=PIPE)
lines = []
for line in p.stdout.readlines():
lines.append(line)
out = string.join(lines)
print out
if out.strip():
print out.strip('\n')
sys.stdout.flush()
Run Code Online (Sandbox Code Playgroud)
...但是,如果我交换Debug|Win32它Debug,它不起作用,它完美地工作..
感谢这里的每一条评论
devenv.exe和之间存在差异devenv.com,两者都是可执行的并且存在于同一目录(叹息)中.问题中使用的命令行和一些答案没有说出他们想要的,所以我不确定哪个会被使用.
如果你想从命令行调用,那么你需要确保使用devenv.com,否则你可能会弹出一个GUI.我认为这可能是一些(但不是全部)混乱的原因.
使用时shell = False,它将把字符串视为单个命令,因此您需要将命令/参数作为列表传递。类似于:
from subprocess import Popen, PIPE
cmd = [
r"C:\Program Files\Microsoft Visual Studio 8\Common7\IDE\devenv", # in raw r"blah" string, you don't need to escape backslashes
"solution.sln",
"/build",
"Debug|Win32"
]
p = Popen(cmd, stdout=PIPE, stderr=PIPE)
out = p.stdout.read() # reads full output into string, including line breaks
print out
Run Code Online (Sandbox Code Playgroud)