问题描述
我正在使用 sh
在Python脚本中运行git命令。
I'm using sh
to run git commands inside a Python script.
In [1]: from sh import git
In [2]: s = git("log", "-1", pretty="format:%h %s")
In [3]: print s
4f14a66 basic debug page
[?1h = 4f14a66基本调试页面[m [K [?1l> 。我尝试使用 repr()
查看此字符串中的字符,无效:
This seems to work as expected. However, using this in a Django template gives [?1h= 4f14a66 basic debug page[m [K[?1l>
. I tried to see what characters were in this string using repr()
, to no avail:
In [4]: print repr(s)
4f14a66 basic debug page
结果是 sh
中的命令返回一个$ code> RunningCommand ,它有一个 .stdout
属性:
It turns out commands in sh
return a RunningCommand
that has a .stdout
attribute:
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运行命令是很好的:
How do I get "4f14a66 basic debug page"
i.e. the string without the escapes? Running the command from Bash is fine:
$ git log -1 --pretty="format:%h %s"
4f14a66 basic debug page
推荐答案
<$ c $ REPL中的c> s.stdout 不会打印它,而是显示它的 repr()
。使用 print s.stdout
来获取您要查找的内容。
s.stdout
in the REPL will not print it but display its repr()
. Use print s.stdout
to get what you are looking for.
如果您不想使用任何转义代码执行它使用 subprocess.call()
- stdout不是tty大多数程序不输出任何转义序列。
If you do not want any escape codes consider executing it using subprocess.call()
- with stdout not being a tty most programs do not output any escape sequences.
这篇关于在Python中打印stdout,没有shell转义序列的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!