程序问答   发布时间:2022-06-02  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了git show / log,不带外壳转义序列,用于python sh大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决git show / log,不带外壳转义序列,用于python sh?

开发过程中遇到git show / log,不带外壳转义序列,用于python sh的问题如何解决?下面主要结合日常开发的经验,给出你关于git show / log,不带外壳转义序列,用于python sh的解决方法建议,希望对你解决git show / log,不带外壳转义序列,用于python sh有所启发或帮助;

这些不是颜色序列,看起来像终端初始化序列。特别:

ESC [ ? 1 h ESC =

是打开功能键模式的顺序,

ESC [ ? 1 l ESC >

是再次将其关闭的顺序。这表明git log正在通过寻呼机运行。我不太清楚为什么。通常,当输出是管道时,git会抑制对分页器的使用(subprocess.Popen()至少与它一样sh,尽管我没有使用过该sh模块,但我会虑with )。

(暂停查阅文档…)

啊哈!根据sh sh模块文档,默认情况下,sh-module- run命令的输出通过伪tty。这是在欺骗git运行您的寻呼机。

作为一种较脏的解决方法git --no-pager log ...,即使使用,您也可以禁止使用寻呼机sh。或者,您可以尝试使用该_tty_out=false参数(再次,我没有使用过sh模块,您将不得不进行一些实验)。有趣的是,sh模块文档底部的示例之一是git!

解决方法

我正在使用python的sh编写git命令脚本。例如,我做类似的事情

import sh
git = sh.git.bake(_cwd='/some/dir/')

project_hash = git('rev-parse','HEAD').stdout.Strip()
projecT_Branch = git('rev-parse','--abbrev-ref','HEAD').stdout.Strip()
project_date = git('log','-1','--pretty=format:%ci').stdout.Strip()

然后将project_hash,projecT_Branch和project_date写入数据库等。

问题是git有时会在其输出中添加sHell换码序列。例如,

print(repr(project_hash))
print(repr(projecT_Branch))
print(repr(project_datE))

导致

'e55595222076bd90b29e184b6ff6ad66ec8c3a03'
'master'
'\x1b[?1h\x1b=\r2012-03-26 01:07:40 -0500\x1b[m\r\n\r\x1b[K\x1b[?1l\x1b>'

前两个字符串不是问题,但最后一个字符串(日期)具有转义序列。

有什么办法可以摆脱这些问题,例如要求git不要输出任何转义序列?

我用git log命令尝试了“ –no-color”选项。那没有帮助。

我也很乐意在python本身中删除它们,但我不知道如何。我尝试了s.encode(’ascii’),其中s是日期字符串。那并没有改变。

没有外壳转义序列的Python中的标准输出解决了相同的问题。推荐使用python的子进程而不是sh。例如,我可以

project_date = subprocess.check_output(["git","log","-1","--pretty=format:%ci"],cwd='/some/dir/')

print(repr(project_datE))

'2012-03-26 01:07:40 -0500'

那就是我想要的。但是,如果可能的话,我宁愿坚持使用sh,因此想知道是否可以避免使用sh进行转义序列。

有什么建议?

大佬总结

以上是大佬教程为你收集整理的git show / log,不带外壳转义序列,用于python sh全部内容,希望文章能够帮你解决git show / log,不带外壳转义序列,用于python sh所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。