带有机器人框架中引号的参数问题

时间:2015-11-19 11:05:21

标签: python python-2.7 robotframework

我正在尝试运行一个简单的python脚本,它接受一个参数并打印它。 我正在使用 Robot Framework 操作系统库中的关键字运行执行此python脚本。

我试图通过以下两种方式执行:

${rc}   ${output}=  Run And Return Rc And Output    python "C:\\Users\\Administrator\\Desktop\\abc.py" "C:\Program Files (x86)\Common Files"

在这种情况下输出正常:

Documentation:  
Runs the given command in the system and returns the RC and output.
Start / End / Elapsed:  20151119 16:01:57.147 / 20151119 16:01:57.179 / 00:00:00.032
16:01:57.147    INFO    Running command 'python "C:\Users\Administrator\Desktop\abc.py" "C:Program Files (x86)Common Files" 2>&1'.  
16:01:57.179    INFO    ${rc} = 0   
16:01:57.179    INFO    ${output} = C:Program Files (x86)Common Files

然而,当我尝试以下面的方式运行时,它会给出错误:

${rc}   ${output}=  Run And Return Rc And Output    "C:\\Python27\\python.exe" "C:\\Users\\Administrator\\Desktop\\abc.py" "C:\Program Files (x86)\Common Files"

错误:

16:12:44.481    INFO    Running command '"C:\Python27\python.exe" "C:\Users\Administrator\Desktop\abc.py" "C:Program Files (x86)Common Files" 2>&1'.    
16:12:44.481    INFO    ${rc} = 1   
16:12:44.481    INFO    ${output} = The filename, directory name, or volume label syntax is incorrect.

如果我在命令提示符下运行相同的东西,它可以正常工作。

C:\Windows>"C:\Python27\python.exe" "C:\Users\Administrator\Desktop\abc.py" "C:Program Files (x86)Common Files"
C:Program Files (x86)Common Files

想知道Robot Framework的第二种情况我出错了吗?

1 个答案:

答案 0 :(得分:2)

RobotFramework没有使用shell来运行命令,而是将其详细传递给Windows。所以它正在寻找一个名为"C:\Python27\python.exe"而不是C:\Python27\python.exe的字段。请注意包装引号,通常这些引号在调用命令之前由shell处理。因此,您应该将命令更改为C:\\Python27\\python.exe "C:\\Users\\Administrator\\Desktop\\abc.py" "C:\Program Files (x86)\Common Files"

为了更好地理解shell参数的不同,您可以尝试比较

的结果
subprocess.check_call('"C:\Python27\python.exe" "C:\Users\Administrator\Desktop\abc.py" "C:Program Files (x86)Common Files"')

subprocess.check_call('"C:\Python27\python.exe" "C:\Users\Administrator\Desktop\abc.py" "C:Program Files (x86)Common Files"', shell=True)