我有一个运行git命令git log --pretty=format:%H branch -n 20的python脚本

它使用process = subprocess.Popen(commandLine, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE)运行该命令

当我们在PowerShell中直接运行git命令时,或者通过python脚本运行时,它会工作并返回提交.当我通过Jenkins运行PowerShell脚本时,该命令返回以下内容,没有提交数据:

09:12:00  H
09:12:00  H
09:12:00  H
09:12:00  H
09:12:00  H
09:12:00  H
09:12:00  H
09:12:00  H

对于为什么会发生这种情况以及如何解决,你有什么 idea 吗?

编辑:在Jenkins中运行时,%看起来被go 掉了,因此命令最终为git log --pretty=format:H branch -n 20,因此失败.我不确定如何防止这种情况发生.

谢谢!

推荐答案

shell=True请求使用平台本机shell 来执行给定命令行.

在Windows上,本机shell 是cmd.exe,其中%metacharacter,因此需要escaping才能被解释为verbatim.

  • 不幸的是,cmd.exe治疗% differently取决于它是否在interactive cmd.exe会话中使用,而不是in a batch file.

    • 在图中有Jenkins not的情况下,Python应用interactive语法,其中不属于variable reference%个字符(例如%USERNAME%)是kept as-is.
  • 有了jenkins --我不知道为什么--如果在你的电话中,%最终变成了removed,这意味着batch-file syntax apparently applies when calling via Jenkins,在这种情况下,你需要到double any 100 chars.才能保留它们.

因此:

# When called via Jenkins.
process = subprocess.Popen(
  commandLine.replace('%', '%%'), 
  shell=True, 
  stdout=subprocess.PIPE, 
  stderr=subprocess.PIPE
)

Python相关问答推荐

如何在PIL、Python中对图像应用彩色面膜?

请从Python访问kivy子部件的功能需要帮助

symy.分段使用numpy数组

Pydantic:如何将对象列表表示为dict(将列表序列化为dict)

2维数组9x9,不使用numpy.数组(MutableSequence的子类)

Pandas 有条件轮班操作

用Python解密Java加密文件

Streamlit应用程序中的Plotly条形图中未正确显示Y轴刻度

SQLAlchemy Like ALL ORM analog

部分视图的DataFrame

Python导入某些库时非法指令(核心转储)(beautifulsoup4."" yfinance)

Tkinter菜单自发添加额外项目

在极中解析带有数字和SI前缀的字符串

ruamel.yaml dump:如何阻止map标量值被移动到一个新的缩进行?

polars:有效的方法来应用函数过滤列的字符串

将CSS链接到HTML文件的问题

没有内置pip模块的Python3.11--S在做什么?

裁剪数字.nd数组引发-ValueError:无法将空图像写入JPEG

使用SQLAlchemy从多线程Python应用程序在postgr中插入多行的最佳方法是什么?'

Django更新视图未更新