2016-11-24 16 views
2

imは現在pexpectを通じてgitリポジトリを制御するプログラムで作業しています。pexpectを使ったGitコマンド:ターミナルが完全に機能していない

git statusのような単純なコマンドは動作しますが、git diff --name-status ...のようなコマンドは機能しません。次のエラーメッセージが表示されます。WARNING: terminal is not fully functional

私が見つけたすべての解決策は、WindowsまたはMacでこの問題を解決することでした。

相続人は私のプログラムからcodesnippet:

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を実行できますか?

挨拶はジョニー

答えて

2

私は、次のエラーメッセージが表示されます:警告:端末が完全には機能しません。

これは警告であり、エラーではありません。

たとえば、より機能的な端末でpexpectを実行できますか?あなたは可能性が

あなたは人間が上の相互作用のように動作しなければならないテストを書いているのでない限り(例えば、https://github.com/docker/docker/issues/8631;それはあなたがOSや環境などの詳細を言及することが重要だということに注意してください私はちょうどここに推測しています) - ブタターミナル、あなたは気にしないでください。プログラムからGitを駆動するには、プログラム駆動型になるように設計されたGitの部分を使用します。あなたがこれを行うことができます

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の、例えば、git diff-treeを実行します。あなたはプログラムをより直接的に制御することができ、 "配管命令"であるgit diff-treeを使うことで、機械可読に設計された出力が得られます。参照してくださいWhich are the plumbing and porcelain commands?

shell=Falseを使用することによって、あなたはまた、一般的なセキュリティ上の問題を防ぐ。)

+0

はお返事をあなたの非常にありがとうございました!私がdiff-treeを通して必要なものすべてを手に入れることができるかどうかがわかります。 – JohnnyKonfetti

関連する問題