2017-04-07 77 views
0

我想用参数启动ReadyApi的testrunner.bat。我试图通过一些XML部分(PeriodEnd在下面的代码)作为参数传递给subprocess.Popen:Python:将“<”传递给Popen

argslist = ['C:/Program Files/SmartBear/ReadyAPI-1.9.0/bin/testrunner.bat', 
    '-a', '-s', 'TestSuite', '-c', 'TestCase', '-f', 'C:/temp/', '-P', 
    'PeriodEnd=<PeriodEnd>2017-04-11T00:00:00.000Z</PeriodEnd>', 
    'C:/temp/soapui-project.xml'] 
proc = Popen(argslist, stdout=PIPE, stderr=PIPE) 

这将产生以下错误:

The system cannot find the file specified. 

我发现,认为“<”和“>”是问题。我怎样才能摆脱它们或将它们传递给Popen?

+0

我猜的Windows愿意为你把周围的特定参数双引号,但是我没有Wintendo盒测试此上。 – tripleee

+0

您是否尝试直接在CMD中运行该命令? –

+0

我也尝试过'“”PeriodEnd = 2017-04-11T00:00:00.000Z“”'但这没有帮助。 – Tobias

回答

1

在CMD转义字符^

C:\> echo asdf<123> 
The syntax of the command is incorrect. 

C:\> echo asdf^<123^> 
asdf<123> 
+0

是的,子进程'list2cmdline'使用VC++规则来创建命令行。它不知道如何转义cmd.exe的命令行,特别是考虑到它们通常必须经过精心设计,不仅可以存活cmd,还可以通过命令行解析通过cmd运行的任何命令行。如果您使用'Popen'直接运行批处理文件或使用'shell = True',我建议使用经过验证的命令行字符串而不是args列表。 – eryksun