2017-04-21 149 views
0

以下是我试图运行如何运行蟒蛇Windows命令行命令时,命令有双引号

device_editor_path = os.path.join(syntax_checker_path,'DeviceEditor.jar') 
output_path = os.path.join(reviewdocs_path,'syntaxchecker_orig_output.txt') 
output_path = '"%s"' % output_path # Need to do this because in case there is a space in output_path 
# run syntax checker 
cmd = 'java -jar' + ' ' + device_editor_path + ' ' + content_data_path + ' ' + event_source_name 
if version == 'v2': 
    cmd = cmd + ' ' + '-v2' 
final_cmd = cmd + ' ' + '>' + ' ' + output_path 
# final_cmd_test = r'java -jar C:\TOOLS_UI\syntaxchecker\DeviceEditor.jar C:\Users\patela28\Perforce\content-dev\dev\envision\content\content-data\ symantecav -v2 > "C:\Users\patela28\Desktop\jira\ESU#105\Sprint_27\SMC-112\ReviewDocs&Checklist\syntaxchecker_orig_output.txt"' 
print(final_cmd) 
status = os.system(final_cmd) 

打印的输出代码(final_cmd)是

Java的罐子C:\ TOOLS_UI \ syntaxchecker \ DeviceEditor.jar C:\ Users \ patela28 \ Perforce \ content-dev \ dev \ envision \ content \ content-data \ symantecav -v2>“C:\ Users \ patela28 \ Desktop \ jira \ ESU #105 \ Sprint_27 \ SMC-112 \ ReviewDocs & Checklist \ syntaxchecker_orig_output.txt“

Thi s命令确实运行,但命令行上显示的整个输出并没有被重定向到syntaxchecker_orig_output.txt。

当我复制粘贴命令行上面的相同的命令它完美的作品,我得到一个syntaxchecker_orig_output.txt文件的位置。

无法弄清楚为什么会发生这种情况。

回答

0

您必须启动命令处理器。 Java不会为你分析命令行。下面应该工作:

device_editor_path = os.path.join(syntax_checker_path,'DeviceEditor.jar') 
output_path = os.path.join(reviewdocs_path,'syntaxchecker_orig_output.txt') 
output_path = '"%s"' % output_path # Need to do this because in case there is a space in output_path 
# run syntax checker 
cmd = 'cmd.exe /c java -jar' + ' ' + device_editor_path + ' ' + content_data_path + ' ' + event_source_name 
if version == 'v2': 
    cmd = cmd + ' ' + '-v2' 
final_cmd = cmd + ' ' + '>' + ' ' + output_path 
# final_cmd_test = r'java -jar C:\TOOLS_UI\syntaxchecker\DeviceEditor.jar C:\Users\patela28\Perforce\content-dev\dev\envision\content\content-data\ symantecav -v2 > "C:\Users\patela28\Desktop\jira\ESU#105\Sprint_27\SMC-112\ReviewDocs&Checklist\syntaxchecker_orig_output.txt"' 
print(final_cmd) 
status = os.system(final_cmd) 
0

不知道的原因,但改变

final_cmd = CMD + '' + '>' + '' + output_path

final_cmd = cmd +''+'>'+ output_path

为我工作。

+0

这似乎不可靠,可能是cmd.exe中的某种解析错误。尝试将原始命令行用双引号括起来,例如'os.system('“%s”'%final_cmd)'。在这种情况下,cmd应该剥离第一个和最后一个引号,否则就像命令行是批处理文件中的一行那样解析命令行。 – eryksun

+0

最终你会更好地使用'subprocess.Popen'解决这个问题。只需打开输出文件并使用标准输出重定向到文件来运行base命令,例如'p = subprocess.Popen(cmd,stdout = output.fileno())'。 – eryksun