程序员最近都爱上了这个网站  程序员们快来瞅瞅吧!  it98k网:it98k.com

本站消息

站长简介/公众号

  出租广告位,需要合作请联系站长

+关注
已关注

分类  

暂无分类

标签  

暂无标签

日期归档  

暂无数据

知道为什么 paramiko 将 \x07 而不是 \t 发送到远程服务器吗?

发布于2022-10-31 20:29     阅读(1049)     评论(0)     点赞(19)     收藏(2)


I am struggling for the past couple of days to figure out why is paramiko sending \x07 instead of tab to remote session. I am using paramikos invoke_shell because i need to run several interconnected commands. Everything works except for this part:

check_export = f'echo -e \"this\tis\tjust a test\" > /tmp/export'

This is simplified version, the only important part is that i need to have words delimited by a tab (in certain places only). print returns correct form:

echo -e "this   is      just a test" > /tmp/export

but when i check the recv() from paramiko session i see this:

b'echo -e "this\x07is\x07just a test" > /tmp/export\r\n[root@server~]# '

因此文件 /tmp/export 不包含制表符,并且前 3 个单词被卡在一起。我试过提供文字标签,\t,U00000009,没有任何效果。
我也尝试在字符串上执行 .encode() ,但我得到错误是字节是预期的,而不是字符串。

我在这里想念什么?我会很感激一些意见。谢谢


解决方案


这可能是您滥用交互式 shell 进行命令自动化的副作用。如果你echo -e "this在 shell 中输入然后按下Tab键会发生什么?如果没有找到这样的文件,shell 将尝试扩展this为一个文件名并发出哔哔声(ASCII 7)。这就是你的代码所做的。不是 Paramiko 将 ASCII 7 ( bell ) 借给服务器。是服务器用铃铛响应您发送Tab密钥。

不要将交互式 shell 用于命令自动化。请参阅
在 Paramiko 中执行多个命令,以便命令受到其前任的影响


或者,如果您想坚持您的(imo 错误)方法,请通过转义反斜杠将文字\ t序列发送到远程 shell(我假设您实际上打算这样做,基于):-e\\t

check_export = f'echo -e \"this\\tis\\tjust a test\" > /tmp/export'

顺便说一句,这里不需要f'...'或者,也许你打算使用r'...'

check_export = r'echo -e \"this\tis\tjust a test\" > /tmp/export'

请参阅https://docs.python.org/3/reference/lexical_analysis.html#string-and-bytes-literals



所属网站分类: 技术文章 > 问答

作者:黑洞官方问答小能手

链接:https://www.pythonheidong.com/blog/article/1834175/5f55a51d8bc3f9291760/

来源:python黑洞网

任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任

19 0
收藏该文
已收藏

评论内容:(最多支持255个字符)