如何在 Robot Framework 测试用例的命令行参数中传递 Tab?
How to pass Tab in a command line argument in a Robot Framework test case?
我通过 ssh 从 Robot Framework 测试用例中查询 SQL 服务器 table,并希望在查询结果中使用 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': Missing argument. Enter '-?' for help.
我也试过写\x09而不是\t,但\t还是出现在日志中。 Tab 的语法是什么,以便在将其作为命令行参数传递给进程时展开?
我假设我可以通过指定 shell=True 并将整个命令行写在一个字符串中来完成,但是手动转义字符一次 Python 语法和两次 shell 语法变得很麻烦,所以我不会立即这样做。
解决方案是添加更多的反斜杠。第一个反斜杠将在 sqlcmd 看到它之前很久就被 Robot Framework 吃掉。您可能需要两个反斜杠,也可能需要三个或四个。这取决于在最终执行命令之前还有什么在进行替换。由于您有 Robot Framework 调用 ssh 调用 sqlcmd,因此您可能需要多个。
虽然反斜杠的数量是确定的,但经验告诉我,有时最简单的事情就是不断添加更多直到它起作用。
我通过 ssh 从 Robot Framework 测试用例中查询 SQL 服务器 table,并希望在查询结果中使用 Tab 作为分隔符,因此我尝试传递选项 -s “
|${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': Missing argument. Enter '-?' for help.
我也试过写\x09而不是\t,但\t还是出现在日志中。 Tab 的语法是什么,以便在将其作为命令行参数传递给进程时展开?
我假设我可以通过指定 shell=True 并将整个命令行写在一个字符串中来完成,但是手动转义字符一次 Python 语法和两次 shell 语法变得很麻烦,所以我不会立即这样做。
解决方案是添加更多的反斜杠。第一个反斜杠将在 sqlcmd 看到它之前很久就被 Robot Framework 吃掉。您可能需要两个反斜杠,也可能需要三个或四个。这取决于在最终执行命令之前还有什么在进行替换。由于您有 Robot Framework 调用 ssh 调用 sqlcmd,因此您可能需要多个。
虽然反斜杠的数量是确定的,但经验告诉我,有时最简单的事情就是不断添加更多直到它起作用。