在python中运行多个gerrit查询

2024-10-03 13:20:17 发布

您现在位置:Python中文网/ 问答频道 /正文

我尝试在python中运行gerrit cherry pick查询

query_to_run='git fetch https://gerritserver.com/projectname refs/changes/51/1151/1 ' + '&&' +  ' git cherry-pick FETCH_HEAD'

我收到错误: 致命:找不到远程引用&; 意外的命令流结尾

我的代码可以与其他gerrit查询一起工作,但不是这一个,是不是引起了问题!在

谢谢 普拉提巴


Tags: torunhttpsgitcomfetchquerycherry
1条回答
网友
1楼 · 发布于 2024-10-03 13:20:17

&&令牌对Git或Gerrit没有意义,但由shell解释。默认情况下,subprocess模块不将命令传递给shell,而是直接运行进程,因此query_to_run中的字符串作为单个命令发送。强迫子流程.Popen(), subprocess.check_调用()或用于将命令传递给shell的任何方法,pass shell=True:

subprocess.check_call(query_to_run, shell=True)

但是,不鼓励使用shell=True,在这种情况下是不必要的。&&只需运行一个命令,如果成功,运行另一个命令。它基本上相当于以下Python语句序列:

^{pr2}$

或者,如果您不希望在任一命令失败时引发异常:

subprocess.call(command1) != 0 and subprocess.call(command2) != 0

除此之外,我强烈建议养成一个好习惯,把参数列表传递给进程执行函数而不是字符串。传递字符串在很多时候都可以工作,但是当参数包含空格时,您突然需要考虑引用。在

把所有东西放在一起,这就是认为您的代码应该是这样的:

try:
    subprocess.check_call(['git', 'fetch', 
                           'https://gerritserver.com/projectname',
                           'refs/changes/51/1151/1'])
    subprocess.check_call(['git', 'cherry-pick', 'FETCH_HEAD'])
except (EnvironmentError, subprocess.CalledProcessError):
    # Suitable error handling here. I'm not sure about
    # the possibility of EnvironmentError exceptions.

另外,关于术语的说明:你说的是Gerrit查询,但是使用这种语言可能会让人困惑。gerritqueryone通常是指输入UI(或等效restapi)中搜索框的Lucene查询字符串。在

相关问题 更多 >