Robot Framework中带引号的参数问题

1 投票
1 回答
2436 浏览
提问于 2025-05-10 15:17

我正在尝试运行一个简单的Python脚本,这个脚本接受一个参数并打印出来。 我是通过Robot Framework中的Operating System库里的Run这个关键词来执行这个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 个回答

2

RobotFramework 不是通过命令行来运行命令,而是直接把命令传给 Windows。所以它在找一个名为字面意思的 "C:\Python27\python.exe" 的文件,而不是 C:\Python27\python.exe。注意那些包裹的引号,通常这些引号是在命令执行前由命令行处理的。因此,你应该把命令改成 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"')

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

撰写回答