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ď č. 1Chybové 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"))