我使用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
最佳答案
repl中的s.stdout
不会打印它,而是显示它的repr()
。使用print s.stdout
获取所需内容。
如果不需要任何转义代码,请考虑使用subprocess.call()
-在stdout不是tty的情况下执行它,因为大多数程序不输出任何转义序列。
关于python - 在不带 shell 转义序列的Python中打印标准输出,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36247009/