我sh用来在Python脚本中运行git命令。
sh
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(),但无济于事:
[?1h= 4f14a66 basic debug page[m [K[?1l>
repr()
In [4]: print repr(s) 4f14a66 basic debug page
事实证明,sh返回的命令RunningCommand具有.stdout属性:
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运行命令很好:
"4f14a66 basic debug page"
$ git log -1 --pretty="format:%h %s" 4f14a66 basic debug page
s.stdout在REPL中将不会打印它,而是显示它repr()。使用print s.stdout让你在找什么。
s.stdout
print s.stdout
如果您不希望使用任何转义代码,请考虑使用subprocess.call()-在stdout不是tty的情况下执行它,大多数程序不会输出任何转义序列。
subprocess.call()