我正在尝试使用 python 脚本对 cherry-pick gerrit 进行评论。我已经有了 cherry-pick 审查所需的字符串。我已经使用 pexpect 来自动化密码输入步骤。
这是一个例子。对于每次审查,我必须执行以下 2 个命令:
- git fetch "ssh://myusername@my-gerrit.server.net:34343/project" refs/changes/45/255645/38
- git cherry-pick FETCH_HEAD
只有第一个命令要求输入密码。这是我写的代码:
child = pexpect.spawn('git fetch "ssh://myusername@my-gerrit.server.net:34343/project" refs/changes/45/255645/38')
child.logfile_read = sys.stdout
child.expect(r'Enter passphrase for key(.*?):', timeout=10)
child.sendline('mypwd')
child.expect([pexpect.TIMEOUT, 'host$', pexpect.EOF])
child.sendline('git cherry-pick FETCH_HEAD')
child.expect([pexpect.TIMEOUT, 'host$', pexpect.EOF])
当我运行脚本时,我没有看到任何错误。然而,第二个命令 (git cherry-pick FETCH_HEAD) 似乎没有被执行。我这样说是因为当我手动运行这些命令时,第二个命令会引发 git 合并冲突。当我运行脚本时,我看不到 cherry-pick 正在进行中(git 状态显示全部干净)。我尝试了一些变体,但无法使其正常工作。请帮忙。
提前致谢
回答1
要在不修改脚本的情况下添加日志,请使用 https://stackoverflow.com/a/56094711/6309 来跟踪事件。
export GIT_TRACE2=1
export GIT_TRACE2_EVENT=1
(或设置,如果你在 Windows 上)
还要确保使用您用于进行手动测试的同一帐户启动您的脚本。
如果第二个命令似乎没有被执行,请检查是否如 https://www.reddit.com/r/learnpython/comments/1ogvqu/problem_executing_remote_commands_using_python/ 中的提示是问题所在:
看来问题出在我预期的提示符上。
如果我将expect
更改为“child.expect('$ .*', timeout=15)
”,它会起作用。