当我写一个python脚本与配置运行devenv的“调试|的Win32”它什么都不做

StackOverflow https://stackoverflow.com/questions/1049784

  •  20-08-2019
  •  | 
  •  

更新::当我使用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()

...这是不行的,但是,如果我换用Debug|Win32 Debug,它完美..

感谢这里的每一个评论

有帮助吗?

解决方案

当使用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

其他提示

有是devenv.exedevenv.com,这两者都是可执行的,活在相同的目录之间的差异(叹息)。在提问中使用的命令行和一些答案不说,他们希望,所以我不知道这会习惯的。

如果你想在命令行调用,那么你需要确保你使用devenv.com,否则你可能会得到一个GUI弹出。我想这可能是有些混乱的原因(但不是全部)。

请参阅部17.1.5.1。在Python文档。

在Windows中,Python中自动添加项目周边配置参数即调试双引号|“| Win 32调试”,以devenv的Win32其实为通过。你并不需要添加双引号,你不需要通过壳= True以POPEN。

使用将procmon以查看传递给devenv的参数字符串。

尝试双引号等: 'devenv的A.sln /构建 “调试|的Win32”'

看起来像Windows的外壳采取任何|作为管(尽管报价和逃逸)。你有没有试过shell=False呢?

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top