Robot Framework 中带引号的参数问题
Issue with arguments with quotes in Robot Framework
我正在尝试 运行 一个简单的 python 脚本,它接受一个参数并打印它。
我正在使用 运行 关键字 Operating System 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 的第二种情况下哪里出错了?
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)
我正在尝试 运行 一个简单的 python 脚本,它接受一个参数并打印它。 我正在使用 运行 关键字 Operating System 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 的第二种情况下哪里出错了?
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)