【问题标题】:How to pass Tab in a command line argument in a Robot Framework test case?如何在 Robot Framework 测试用例的命令行参数中传递 Tab?
【发布时间】:2015-11-20 00:14:32
【问题描述】:

我通过 ssh 从 Robot Framework 测试用例中查询 SQL Server 表,并希望在查询结果中使用 Tab 作为分隔符,因此我尝试将选项 -s "" 传递给 sqlcmd。在 Robot Framework 中,我尝试了以下语法:

|${result} =|run process|ssh|admin@${SRV_IP}|sqlcmd|-S|.\\\\SQLEXPRESS|-d|${DB_NAME}|-s|\t|-W|-Q|"select ..."|

但显然 \t 序列没有像我在日志中看到的那样扩展为 Tab 字符

10:47:32.411    INFO    Starting process: ['ssh', 'admin@192.168.77.129', 'sqlcmd', '-S', '.\\\\SQLEXPRESS', '-d', 'test_main', '-s', '\t', '-W', '-Q', '"select ...;"']

并在stderr包含的命令执行后

Sqlcmd:'-s':缺少参数。进入 '-?'寻求帮助。

我也尝试用\x09 代替\t,但是\t 还是出现在日志中。 Tab 的语法是什么,以便在将其作为命令行参数传递给进程时展开?

我假设我可以通过指定 shell=True 并将整个命令行写入一个字符串来做到这一点,但是对于 Python 语法手动转义字符一次,对于 shell 语法手动转义两次变得很麻烦,所以我不会立即去这边。

【问题讨论】:

  • 您是否尝试过添加额外的`s? The backslash is removed by robot before the command line is run. Perhaps using \\t` 会起作用,因为机器人会转换\` to a single `,这样shell 就会看到\t。你可能需要更多的反斜杠,我不知道run process 在幕后做什么。
  • 您 100% 正确,\\\t(三个反斜杠)是我问题的答案,尽管我不太明白为什么。非常感谢。

标签: robotframework


【解决方案1】:

解决方案是添加更多反斜杠。第一个反斜杠早在 sqlcmd 看到它之前就被 Robot Framework 吃掉了。你可能需要两个反斜杠,你可能需要三个或四个。这取决于在命令最终执行之前还有什么替换。由于您有调用 sqlcmd 的机器人框架调用 ssh,因此您可能需要几个。

虽然反斜杠的数量是确定的,但经验告诉我,有时最简单的方法就是不断添加更多,直到它起作用。

【讨论】:

    猜你喜欢
    • 2018-12-27
    • 2019-07-16
    • 2021-11-25
    • 2019-09-03
    • 1970-01-01
    • 2021-06-27
    • 2022-08-20
    • 2020-12-02
    • 2018-11-14
    相关资源
    最近更新 更多