当我写一个python脚本与配置运行devenv的“调试|的Win32”它什么都不做
-
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.exe
和devenv.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
呢?