/ / Získanie posledného dátumu potvrdenia gitu odovzdaním príkazu git do podprocesu v pythone - python, git, subprocess, gitpython

získať posledný git spáchať dátum prostredníctvom príkazu git do subprocesu v python - python, git, subprocess, gitpython

Mám skript, v ktorom potrebujem iba získať dátum vo formáte 2015-07-28 posledného záväzku za git.

ale pomocou git log -1 --pretty=format:"%ci" v termináli, ak sa dostanem Tue Jul 28 16:23:24 2015 +0530 potom, keď sa snažím

odovzdať to ako reťazec subprocess.Popen Páči sa mi to

subprocess.Popen("git log -1 --pretty=format:"%cd"" shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE))

ale toto mi vyvoláva chybu TypeError: %c requires int or char čo myslím, že python veci odovzdávame znaku% c, zatiaľ čo to bolo kvôli získaniu dátumu pomocou príkazu git.

Potrebujem, aby bol tento dátum zreťazený do reťazca môjho pythonového skriptu.

odpovede:

0 pre odpoveď č. 1

Chybové hlásenie nezodpovedá vášmu kódu: príslušný kód by sa vytvoril SyntaxError, nie TypeError.

Nepotrebujete shell=True, Ak chcete získať výstup git, môžete použiť subprocess.check_output() funkcie:

from subprocess import check_output

date_string = check_output("git log -1 --pretty=format:"%ci"".split()).decode()

1 pre odpoveď č. 2

Chýba kód ,, a navyše ):

proc = subprocess.Popen(
"git log -1 --pretty=format:"%cd"",
shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
output = proc.stdout.read()
proc.wait()

Po získaní výstupu z príkazu môžete použiť datetime.datetime.strptime previesť reťazec na datetime a skonvertujte ho do formátu, ktorý chcete používať datetime.datetime.strftime:

import datetime
dt = datetime.datetime.strptime(output.rsplit(None, 1)[0], "%a %b %d %H:%M:%S %Y")
print(output)
print(dt.strftime("%Y-%m-%d"))