我想在Windows shell cmd上执行一个批处理文件和一个命令.exe每个Python。它的这个命令:
$cmd.exe /k ""C:Program Files(x86)Microsoft Visual Studio 10.0VCvcvarsall.bat" x86 & msbuild ALL_BUILD.vcxproj"
当我在命令提示符上手动输入此行时,它可以工作。它启动一个新的外壳,执行批处理文件vcvarsall.bat
(使用参数 x86),然后在外壳内执行 msbuild ALL_BUILD.vcxproj。路径被引号,因为它包含空格。
现在,如果我尝试使用此命令在python中执行此命令:
subprocess.call(["cmd.exe", "/k", '"C:/Program Files (x86)/Microsoft Visual Studio 10.0/VC/vcvarsall.bat" x86 & msbuild ALL_BUILD.vcxproj'])
我总是在控制台上收到此错误:
为什么命令以"\"C:而不是找不到命令"\"C:/Program Files (x86)/Microsoft Visual Studio 10.0/VC/vcvarsall.bat\"。
我输入的"C:?"开头?有人知道我该如何解决这个问题吗?
试试这个:
'"C:Program Files(x86)Microsoft Visual Studio 10.0VCvcvarsall.bat" x86 & msbuild ALL_BUILD.vcxproj'
你不能在"-"里面使用(它会被转义)
上的"x x"
等效于subprocess.call中的'x x'
。最终,您可以省略一些"
。
但是..你试过os.system
吗?
import os
os.system('cmd.exe /k ""C:Program Files(x86)Microsoft Visual Studio 10.0VC vcvarsall.bat" x86 & msbuild ALL_BUILD.vcxproj"')
我拥有的Windows命令行参考中的以下内容似乎相关:
* 使用多个命令
您可以使用由命令分隔符分隔的多个命令 && for 字符串,但必须将它们括在引号中(例如, "命令&&命令&命令")。
* 处理引号
如果指定/c 或/k,cmd 将处理字符串和引号的其余部分 仅当满足以下所有条件时,才会保留:
o You do not use /s. o You use exactly one set of quotation marks. o You do not use any special characters within the quotation marks (for example: &<>( ) @ ^ |). o You use one or more white-space characters within the quotation marks. o The string within quotation marks is the name of an executable file. If the previous conditions are not met, string is processed by examining the first character to verify whether or not it is an opening quotation mark. If the first character is an opening quotation mark, it is stripped along with the closing quotation mark. Any text following the closing quotation marks is preserved.