python - 在没有 shell 转义序列的情况下在 Python 中打印标准输出

标签 python shell escaping sh

我正在使用 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 basic debug page[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 basic debug page" 即没有转义的字符串?从 Bash 运行命令没问题:

$ git log -1 --pretty="format:%h %s"
4f14a66 basic debug page

最佳答案

根据 this GitHub issue ,问题的正确解决方案是使用 _tty_out=False:

>>> str(git('show', format='%cN', s=True))
'\x1b[?1h\x1b=\rHonza Javorek\x1b[m\r\n\r\x1b[K\x1b[?1l\x1b>'

>>> str(git('show', format='%cN', s=True, _tty_out=False))
'Honza Javorek\n'

这也是我的重复问题的解决方案:Using sh, git show returns special characters - how to get plain output?

关于python - 在没有 shell 转义序列的情况下在 Python 中打印标准输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36247009/

相关文章:

python - PyParsing:使用反斜杠的 shell 样式空格转义

php - MySQLI-允许正斜杠与插入语句一起使用

python - 如何使用 mlflow.tensorflow.log_model 记录 tensorflow 模型(错误模块 'tensorflow._api.v2.saved_model' 没有属性 'tag_constants' )

python - 列表中是否有任何自引用列表或循环引用的用法,例如。将列表附加到自身

python - 使用 Python 获取 OS X 中所有可用的打印机

linux - shell 级别的变量范围

python - 从函数 **keywords 为 sql 语句创建字符串

bash - Shell脚本中的Echo错误消息

bash - 提取文件名 shell 脚本的一部分

bash - 在子 shell 执行调用期间无法转义变量保留字符串中的引号