如何在 Django 上使用 paramiko 处理 awk 逗号? [复制]

Posted

技术标签:

【中文标题】如何在 Django 上使用 paramiko 处理 awk 逗号? [复制]【英文标题】:How to deal with awk commas using paramiko on Django? [duplicate] 【发布时间】:2019-03-09 22:47:00 【问题描述】:
stdout = session.exec_command('''find  -name "*" -type f -exec stat -c "%n %y" <--**This is bash, not variable of format** + | awk " print $1" "$2 " | grep -v word'''
.format(VARIABLE1, VARIABLE2))

我在Django 1.9.13上使用paramiko 2.4做这段代码,不知道怎么处理,错误是:

KeyError at /get_xml/index/ ' print $1" "$2 '

更新

它现在没有崩溃,但没有返回任何东西,但如果我在 bash 上这样做,它正在工作,认为缺少一些东西......

command = find  -name '*.xml' -type f -exec stat -c '%n %y'  + | awk 'print $1, $2, $3' | grep -v 'word'

stdout = session.exec_command(command)

回答

ssh.connect(hostname=VARIABLE1, username=VARIABLE2)
command = "find  -name '*.xml' -type f -exec stat -c '%n %y'  + | awk 'print $1, $2, $3' | grep -v WHATIDONTWANTTO".format(VARIABLE3, WHATIWANTTOSEARCH)
_, stdout, _ = ssh.exec_command(command)
for item in stdout:
     #do whatever with items
     pass

终于成功了,最后一种方法是使用 session = ssh.get_transport().open_session() 但它总是检索“Nonetype”

【问题讨论】:

VARIABLE3 丢失。 更新,属于bash命令,不是python变量 awk " print $1,$2 " .你的文件名在哪里? 由于双引号,awk 不起作用。将其更改为 awk 'print $1 " " $2' 或更简单的 awk 'print $1, $2' 除了花括号问题,不能在双引号字符串中使用双引号。您的 awk 脚本应该改为单引号。 (另外,避免使用useless use of grep;,或者更好的是,在 Python 中进行输出过滤。) 【参考方案1】:

根据documentation on .format,如果您需要在文字文本中包含大括号字符,可以通过加倍将其转义: 和 。

所以如果我正确理解您的评论,这个-exec stat -c "%n %y" 应该是-exec stat -c "%n %y" 等等。

【讨论】:

以上是关于如何在 Django 上使用 paramiko 处理 awk 逗号? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

如何在 AWS Elastic Beanstalk 上使用 Nginx、React、Webpack、Gunicorn、PostgreSQL、Django 和 DRF 部署应用程序?如何使用此应用程序处

代码发布项目——django实现websocket(使用channels)基于channels实现群聊功能gojs插件paramiko模块

使用paramiko监控Oracle alert日志

不允许在/空静态前缀处配置不当 - Django

如何在 Python Paramiko 中通过 HTTP 代理 ssh?

django 在 / 'file' 处引发 MultiValueDictKeyError