当我编写一个python脚本来运行配置“Debug | Win32”的Devenv时,它什么也没做

时间:2009-06-26 15:31:05

标签: python subprocess

更新:当我使用subprocess.call代替subprocess.Popen时,问题就解决了 - 有人知道原因是什么吗?还有另一个问题:我似乎无法找到控制输出的方法......有没有办法将输出从subprocess.call重定向到字符串或类似的东西?谢谢!

我正在尝试使用Devenv来构建项目,当我在devenv A.sln /build "Debug|Win32"等命令提示符下键入它时它运行得很好 - 但是当我使用python运行{{1}时其中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() Debug|Win32交换,则无效。

感谢此处的每条评论

5 个答案:

答案 0 :(得分:5)

devenv.exedevenv.com之间存在差异,两者都是可执行的并且存在于同一目录(叹息)中。问题中使用的命令行和一些答案没有说出他们想要的,所以我不确定哪些会被使用。

如果您想从命令行调用,则需要确保使用devenv.com,否则您可能会弹出一个GUI。我认为这可能是一些(但不是全部)混淆的原因。

答案 1 :(得分:1)

见第17.1.5.1节。在python文档中。

在Windows上,Python会自动在项目配置参数周围添加双引号,即Debug | win32作为“Debug | win32”传递给devenv。您不需要添加双引号,也不需要将shell = True传递给Popen。

使用ProcMon查看传递给devenv的参数字符串。

答案 2 :(得分:0)

尝试双引用如:'devenv A.sln / build“Debug | Win32”'

答案 3 :(得分:0)

看起来Windows的shell将|作为管道(尽管有引号和转义)。您是否尝试过shell=False

答案 4 :(得分:0)

当使用shell = False时,它会将字符串视为单个命令,因此您需要将命令/ arugments作为列表传递..类似于:

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