Δημοσιεύτηκε: 22 Ιουν 2012, 21:58
Ilias95, είχες δίκιο, ήταν το readline().
Εφτιαξα μια δική μου έκδοση του readline διαβάζοντας ένα-ένα χαρακτήρα με το read(1).
Ορίστε:
Από καιρό ήθελα να παίξω με το datetime, αφορμή να μάθω πώς λειτουργεί.
Δεν λαμβάνει υπόψη το start second όταν υπολογίζει το χρόνο που έμεινε.
Εφτιαξα μια δική μου έκδοση του readline διαβάζοντας ένα-ένα χαρακτήρα με το read(1).
Ορίστε:
- Μορφοποιημένος Κώδικας: Επιλογή όλων
-
import subprocess
import sys
import re
import datetime
child = subprocess.Popen("ffmpeg -i test.mp3 test2.mp3", shell=True, stderr=subprocess.PIPE, stdout=subprocess.PIPE)
complete = False
myline = ''
while True:
out = child.stderr.read(1)
if out == '' and child.poll() != None:
break
#create myline string
myline += out
if out in ('\r','\n'):
#print(myline)
# Duration / start
m = re.search("Duration: ([0-9:.]+), start: ([0-9.]+)", myline)
if m:
# duration in hh:mm:ss format
m_duration = m.group(1)
# start (in seconds?)
m_start = m.group(2)
print("Duration: {0}, start: {1}".format(m_duration, m_start))
n = re.search("time=([0-9.]+)", myline)
if n:
n_tpassed = float(n.group(1))
n_dt = datetime.timedelta(seconds=n_tpassed)
print("time processed: {0} out of {1}".format(n_dt, m_duration))
# Calculate time left:
tformat = '%H:%M:%S.%f'
tdelta = datetime.datetime.strptime(m_duration, tformat) - datetime.timedelta(seconds=n_tpassed)
# Sometimes ffmpeg shows more time processed than the end time. It reverts the date to 1899 and shows a ValueError.
if tdelta.year != 1899:
# The datetime module calculates according to date and time. date is set as 1900-01-01 and we don't need that.
print("Time left to process: {0}".format(tdelta.strftime("%H:%M:%S")))
#reset myline
myline = ''
Από καιρό ήθελα να παίξω με το datetime, αφορμή να μάθω πώς λειτουργεί.
Δεν λαμβάνει υπόψη το start second όταν υπολογίζει το χρόνο που έμεινε.