【发布时间】:2015-11-20 00:14:32
【问题描述】:
我通过 ssh 从 Robot Framework 测试用例中查询 SQL Server 表,并希望在查询结果中使用 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':缺少参数。进入 '-?'寻求帮助。
我也尝试用\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