Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Git diff在抱怨,”他说;外部差异消失,停在&引用;用我的python-diff程序_Python_Git_Subprocess_Return Value_Git Diff - Fatal编程技术网

Git diff在抱怨,”他说;外部差异消失,停在&引用;用我的python-diff程序

Git diff在抱怨,”他说;外部差异消失,停在&引用;用我的python-diff程序,python,git,subprocess,return-value,git-diff,Python,Git,Subprocess,Return Value,Git Diff,这是我差异的开始部分 #!/usr/bin/env python import fileinput import difflib import subprocess import sys # for debugging def info(type, value, info): import traceback traceback.print_exception(type, value, info) print pdb.pm() sys.excepthook =

这是我差异的开始部分

#!/usr/bin/env python
import fileinput
import difflib
import subprocess
import sys

# for debugging
def info(type, value, info):
    import traceback
    traceback.print_exception(type, value, info)
    print
    pdb.pm()

sys.excepthook = info
import pdb
#end debugging

if len(sys.argv) == 8:
    # assume this was passed to git; we can of course do
    # some parsing to check if we got valid git style args
    args = [sys.argv[2], sys.argv[5]]
elif len(sys.argv) == 3:
    args = sys.argv[1:]
else:
    exit("Not a valid number of args (2 or 7) to this diff program")
print "Files: " + ' '.join(args)
for filename in args:
    filetype = subprocess.check_output(['file', filename])
    if filetype.find('text') == -1:
        args.insert(0, 'diff')
        print "A binary file was found: " + filename + ", deferring to diff"
        exit(subprocess.call(args))
当遇到二进制(或非文本)文件时,它会尝试fork
diff
,以获取二进制文件是否不同。目标是将这个pythondiff程序用作git的外部different

但我收到一条可怕的“外部差异消失,停止在”消息,一旦它击中二进制文件


git如何评估我的程序?它怎么知道它死了?返回值不应该指示不同的条件吗?

代码中没有退出函数。如何将
退出
替换为
系统退出

#!/usr/bin/env python

import subprocess
import sys

if len(sys.argv) == 8:
    # assume this was passed to git; we can of course do
    # some parsing to check if we got valid git style args
    args = [sys.argv[2], sys.argv[5]]
elif len(sys.argv) == 3:
    args = sys.argv[1:]
else:
    print "Not a valid number of args (2 or 7) to this diff program"
    sys.exit(1)
print "Files: ", args
for filename in args:
    filetype = subprocess.check_output(['file', filename])
    if filetype.find('text') == -1:
        args.insert(0, 'diff')
        print "A binary file was found: " + filename + ", deferring to diff"
        #sys.stdout.flush()
        subprocess.call(args)
        sys.exit(0)
编辑:
diff
仅在没有差异时使用0退出。因此更改了代码,不使用diff的退出状态


PS:如果没有sys.stdout.flush(),
diff
输出在
print
输出之前。

我可能会放弃“外部diff”配置,并将python diff设置为“difftools”之一。希望它能更好地工作。它能工作,但我真的希望能够使用我的差异,例如
git log-p
exit
(退出程序)和
sys.exit
(也退出程序)它们是一样的。但您使用了未导入的出口。(`from sys import exit')很好。无论哪种方式,它都会做同样的事情。我必须查找
git
源代码。如果不想用sys.exit替换exit,那么应该使用sys import-exit语句中的
?为什么有两个?