gpt4 book ai didi

预期为 : Terminal not fully functional 的 Git 命令

转载 作者:太空狗 更新时间:2023-10-29 14:43:48 25 4
gpt4 key购买 nike

我目前正在开发一个程序,该程序应该通过 pexpect 控制 git 存储库。

git status 这样的简单命令可以工作,但是像 git diff --name-status ... 这样的命令却不能。我收到以下错误消息:WARNING: terminal is not fully functional

我找到的所有解决方案都是为了解决 Windows 或 Mac 上的问题。

这是我程序中的一个代码片段:

my_bash = pexpect.spawn('/bin/bash', cwd="/home/xxx/clone_repo/local.repo/")
my_bash.logfile = sys.stdout
my_bash.sendline(git diff --name-status branch1 branch2)

有人知道这个问题的解决方案吗?例如,我可以使用功能更强大的终端运行 pexpect 吗?

问候约翰尼

最佳答案

I get the following error message: WARNING: terminal is not fully functional.

这是警告,不是错误。

Can i run pexpect with a more functional terminal for example?

你可以(参见,例如 https://github.com/docker/docker/issues/8631 ;请注意,提及操作系统和环境等细节很重要;我只是在这里猜测)——但除非你编写的测试必须表现得像人类在终端,你不应该打扰。要从程序中驱动 Git,请使用 Git 中设计为程序驱动的部分。代替 git diff,运行 git diff-tree,例如:

my_bash = pexpect.spawn('/bin/bash', cwd="/home/xxx/clone_repo/local.repo/")
my_bash.logfile = sys.stdout
my_bash.sendline('git diff --name-status branch1 branch2')

你可以这样做:

proc = subprocess.Popen(['git', 'diff-tree', '-r',
'--name-status', 'branch1', 'branch2'],
shell=False, cwd='/home/xxx/clone_repo/local.repo')

out, err = proc.communicate()
status = proc.wait()

然后处理由此产生的结果。您可以更直接地控制程序,并通过使用“管道命令”git diff-tree,获得机器可读的输出。参见 Which are the plumbing and porcelain commands?

(通过使用 shell=False,您还可以防范常见的安全问题。)

关于预期为 : Terminal not fully functional 的 Git 命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40790921/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com