机器人框架为啥要在命令字符串中加引号?

Posted

技术标签:

【中文标题】机器人框架为啥要在命令字符串中加引号?【英文标题】:Why does the robot framework add quotation marks to a command string?机器人框架为什么要在命令字符串中加引号? 【发布时间】:2020-06-03 09:57:06 【问题描述】:

为什么机器人框架在作为命令执行的时候要给字符串加引号""

示例:我正在尝试通过Run Process 关键字执行命令。这是我的代码:

*** Settings ***
Documentation    Suite description
Library     Process

*** Test Cases ***
Test1
    $X=      Run Process      rm -r     Desktop\\sample.txt

当我在机器人框架中运行上述步骤时,我看到它发送如下命令(在日志文件中检查):

"rm -r"  /Desktop/Sample.txt 

这里rm -r不应在shell中获得引号,但机器人框架会在任何带有单个空格的字符串的开头和结尾之间添加引号,这会导致命令失败。

每当我想将带有空格的字符串传递给 shell 时,都会遇到这个问题。

【问题讨论】:

为什么不使用Remove File keyword 呢? Laurent,是的,我们可以使用,但我只是用这个例子说明了我的场景。我的实际场景是用相同的方式形成具有多个十六进制值作为参数的 ipmi 命令。 问题中没有提到... 【参考方案1】:

机器人在运行命令时不会添加引号。您看到引号是因为错误添加了引号以便更容易理解错误消息。

第一个参数必须是命令的名称。 rm -r 不是有效的命令名称。该命令应为rm,因为-r 是命令的参数,必须与命令隔开两个或多个空格。

$X=  Run Process  rm  -r  Desktop\\sample.txt

为了说明引号仅在日志中而不在实际命令中,请创建一个如下所示的 python 脚本:

# example.py
import sys
for arg in sys.argv:
    print(f"arg: arg")

接下来,创建一个如下所示的机器人脚本:

*** Settings ***
Library  Process

*** Test Cases ***
Example
    $result  Run Process    python  example.py  one  two  three and four
    log  $result.stdout

当您运行测试并检查日志时,您会在日志中看到以下屏幕截图。请注意,Run Process 的日志消息中会出现引号,但您运行的脚本不会获取带有任何添加引号的参数。

【讨论】:

Bryan,如果是这种情况,在我的实际场景中,我想将 command1 输出作为 command2 输入传递,在此之前,我想将 command1 输出转换为十六进制,所以我用蟒蛇关键字。当我像这样传递输入时:0x12 0x14 0x15,我仍然看到机器人在其中添加了“”,尽管它们之间有两个空格。 @Venkat:引号仅添加到日志中,不会传递给命令。我已经更新了我的答案,以包含一个说明这一事实的示例。日志中添加了引号,以便您可以查看哪组字符属于单个参数。

以上是关于机器人框架为啥要在命令字符串中加引号?的主要内容,如果未能解决你的问题,请参考以下文章

为啥用变量排除标签在机器人框架中不起作用?

redshift unload : 仅在字符字段中加上引号而不是数字

何时/为啥要在 SQL 中使用 QUOTENAME?

Discord.js 机器人未在 MessageEmbeds() 中加载图像 url,以前是

如何从机器人框架中包含字符串和字符串类型数字的字符串变量中仅检索整数

为啥我的 Discord 机器人在发出命令后立即崩溃?