Git 预期命令:终端功能不全
Git commands with pexpect: Terminal not fully functional
我目前正在开发一个程序,该程序应该通过 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)
有人知道这个问题的解决方案吗?例如,我可以 运行 期待功能更强大的终端吗?
问候约翰尼
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;请注意,提及 OS 和环境等细节很重要;我只是在这里猜测)——但除非你编写的测试必须表现得像一个人在终端上交互,你不应该打扰。要从程序驱动 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
,即 "plumbing command",您可以获得设计为机器可读的输出。参见
(通过使用 shell=False
,您还可以防范常见的安全问题。)
我目前正在开发一个程序,该程序应该通过 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)
有人知道这个问题的解决方案吗?例如,我可以 运行 期待功能更强大的终端吗?
问候约翰尼
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;请注意,提及 OS 和环境等细节很重要;我只是在这里猜测)——但除非你编写的测试必须表现得像一个人在终端上交互,你不应该打扰。要从程序驱动 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
,即 "plumbing command",您可以获得设计为机器可读的输出。参见
(通过使用 shell=False
,您还可以防范常见的安全问题。)