当前位置: 首页 > 面试题库 >

在不带外壳转义序列的Python中打印标准输出

凌展
2023-03-14
问题内容

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返回的命令RunningCommand具有.stdout属性:

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

问题答案:

s.stdout在REPL中将不会打印它,而是显示它repr()。使用print s.stdout让你在找什么。

如果您不希望使用任何转义代码,请考虑使用subprocess.call()-在stdout不是tty的情况下执行它,大多数程序不会输出任何转义序列。



 类似资料:
  • 问题内容: 我正在使用python的sh编写git命令脚本。例如,我做类似的事情 然后将project_hash,project_branch和project_date写入数据库等。 问题是git有时会在其输出中添加shell换码序列。例如, 导致 前两个字符串不是问题,但最后一个字符串(日期)具有转义序列。 有什么办法可以摆脱这些问题,例如要求git不要输出任何转义序列? 我用git log命令

  • 在Docker Compose管理的Docker容器内运行的Python应用程序中使用语句时,只记录输出。香草语句不可见,因此: ...从未出现在常规日志中: (您可以在我的应用程序中看到其他库显式打印的其他日志,但没有我自己的调用。) 如何避免我的调用被忽略?

  • 问题内容: 如果您有一个带有unicode字符的字符串,则可以打印它,并获得未转义的版本: 但是如果我们有一个包含上面字符串的列表并打印出来: 您仍然会获得转义的字符序列。您如何才能使列表的内容不被转义,这可能吗?像这样: 另外,如果字符串是类型,那么您如何与上述相同? 问题答案: 打印字符串时,将获得对象方法的输出- 在这种情况下,该字符串不带引号。列表的方法不同,它创建一个包含打开和关闭的字符

  • 本文向大家介绍OCaml 从标准输入读取并打印到标准输出,包括了OCaml 从标准输入读取并打印到标准输出的使用技巧和注意事项,需要的朋友参考一下 示例 我们准备一个包含reverser.ml以下内容的文件: 然后,我们使用以下命令编译程序: 我们通过将数据传递到新的可执行文件进行测试: 该reserver.ml程序以命令式风格编写。虽然命令式样式很好,但是将其与功能翻译进行比较很有趣: 由于引入

  • 如果我理解正确转义序列将活动光标位置向左移动,并且在光标位置插入换行符。但是下面的例子令人困惑。 在第一个示例中,将光标向左移动五个位置(在>),然后插入 和 的使用以一种意想不到的方式改变了 的行为。原始字符串中的字符将被覆盖, 将插入末尾,而不是光标位置。有人能解释一下这种行为吗?(或者它取决于终端?我在两个不同的终端上尝试过。)

  • 问题内容: 在Python 3.3中,打印时是否有任何方法可以使字符串下标中的文本成为一部分? 例如H 2(H然后是下标2) 问题答案: 如果您只关心数字,则可以使用和方法: 请注意,这在Python 2中不起作用-请参见Python 2 maketrans()函数与Unicode不兼容,以获取有关为何如此以及如何解决此问题的解释。