git - 通过 pexpect 执行的命令不生效

我正在尝试使用 python 脚本对 cherry-pick gerrit 进行评论。我已经有了 cherry-pick 审查所需的字符串。我已经使用 pexpect 来自动化密码输入步骤。

这是一个例子。对于每次审查,我必须执行以下 2 个命令:

  1. git fetch "ssh://myusername@my-gerrit.server.net:34343/project" refs/changes/45/255645/38
  2. 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)”,它会起作用。

相似文章

python - Pexpect 多行输出

问题如何使用pexpect获得具有多行输出的命令的输出?例子这段代码有效,尽管输出被分成了一行:child=pexpect.spawn('ping-c31.1.1.1')child.expect(pe...

随机推荐

最新文章