Il y avait des moments où je voulais exécuter un diff sur python. Plus précisément, lorsque vous souhaitez jeter un coup d'œil rapide sur les différences entre les fichiers surveillés.
Eh bien, vous pouvez tout faire avec shell, mais si vous voulez faire diverses choses avant cela, python est plus pratique.
Dans un tel cas, le sous-processus check_output est pratique. diff est exit 1 lorsqu'une différence se produit et check_output lève une exception lorsqu'il n'est pas 0. Ainsi, le code de retour et la sortie sont inclus dans les attributs d'exception, vous pouvez donc les récupérer.
subprocess_sample.py
# -*- coding: utf-8 -*-
import subprocess
import shlex
import sys
file1 = sys.argv[1]
file2 = sys.argv[2]
command_line = "diff -u {} {}".format(file1, file2)
command_args = shlex.split(command_line)
rc = 0
try:
rc = subprocess.check_output(command_args)
except subprocess.CalledProcessError as cpe:
print "shell returncode is not 0."
print "returncode: {}".format(cpe.returncode)
print "output: {}".format(cpe.output)
rc = cpe.returncode
print rc
% python subprocess_sample.py hoge_old.txt hoge_new.txt
shell returncode is not 0.
returncode: 1
output: --- hoge_old.txt 2015-06-27 14:29:03.000000000 +0900
+++ hoge_new.txt 2015-06-27 14:28:54.000000000 +0900
@@ -1,2 +1,2 @@
-hoge
+hogo
foo
1
Il y avait un module de commandes, mais il est obsolète dans la série 3 et est obsolète dans la série 2 (2.7 et versions ultérieures).