微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在没有shell转义序列的情况下在Python中打印stdout

我正在使用sh在 Python脚本中运行git命令.
In [1]: from sh import git

In [2]: s = git("log","-1",pretty="format:%h %s")

In [3]: print s
4f14a66 basic debug page

这似乎按预期工作.但是,在Django模板中使用它会给出[?1h = 4f14a66基本调试页面[m [K [?1l>].我尝试使用repr()查看此字符串中的字符,但无济于事:

In [4]: print repr(s)
4f14a66 basic debug page

事实证明,sh中的命令返回一个具有.stdout属性的RunningCommand:

In [5]: type(s)
Out[5]: sh.RunningCommand

In [7]: s.stdout
Out[7]: '\x1b[?1h\x1b=\r4f14a66 basic debug page\x1b[m\r\n\r\x1b[K\x1b[?1l\x1b>'

如何获得“4f14a66基本调试页”,即没有转义的字符串?从Bash运行命令很好:

$git log -1 --pretty="format:%h %s"
4f14a66 basic debug page
REPL中的s.stdout不会打印它,而是显示repr().使用print s.stdout获取您要查找的内容.

如果您不想要任何转义码,请考虑使用subprocess.call()执行它 – 如果stdout不是tty,则大多数程序不会输出任何转义序列.

原文地址:https://www.jb51.cc/bash/385196.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐