DIMITRISG Δημοσ. 1 Αυγούστου 2014 Μέλος Δημοσ. 1 Αυγούστου 2014 Με μία τρελά γρήγορη ματιά. Γιατί χρησιμοποιείς os.system("mkdir -p ...") και όχι os.mkdir κτλ? Επίσης να ξέρεις ότι το subprocess.call() είναι πολύ καλύτερη λύση από το os.system γιατί μπορείς να ελέγξεις αν πέτυχε η εντολή που πήγες να εκτελέσεις. Ομοίως το wget δεν χρειάζεται. Και με urllib(2) κάνεις την δουλειά σου. για να πω την αλήθεια δεν ξέρω ούτε εγώ, απλά στην αρχή ξεκίνησα με os.system και μάλλον μου κόλλησε συνήθεια. αυτό που λες με το subprocess ότι μπορώ να δω αν η εντολή πέτυχε μου δίνει ιδέες... Αν θυμάμαι καλά πέρυσι είχα χρησιμοποιήσει urllib και μετά από αλλαγή του site δεν μου δούλευε λόγω ότι δεν έκανε αναγνώρηση ως πρόγραμμα περιήγησης. Δοκίμασα με wget να πάρω τη σελίδα και αφού δούλεψε το άφησα έτσι. Θα δοκιμάσω στην Python3 μήπως μπορώ να διαχειριστώ αυτό το πρόβλημα καλύτερα Δεν προλαβαίνω να δω περισσότερα τώρα, και περισσότερα θα μπορέσω να δω από Σεπτέμβρη (αν το θυμηθώ· κάνε πότε πότε κανά bump στο thread ). Ωραία δουλίτσα πάντως βάλτο και σε ένα public repo - αργότερα θα το βάλω στο git repo ευχαριστώ, όποτε βρεις χρόνο κοίταξέ το γιατί παρόλο που διαβάζω δεξιά αριστερά παραδείγματα, καλό είναι και μερικές παρατηρήσεις σε προσωπικό επίπεδο...
pmav99 Δημοσ. 1 Αυγούστου 2014 Δημοσ. 1 Αυγούστου 2014 Η καλύτερη λύση για να ανοίγεις σελίδες είναι η requests, αλλά είναι ένα extra dependency. Πάντως και με σκέτη stdlib κάνεις τη δουλειά σου. Python 2 https://docs.python.org/2/howto/urllib2.html Python 3 https://docs.python.org/3.4/howto/urllib2.html Πιθανότατα απλά πρέπει να ορίσεις το user-agent IMHO δεν έχεις λόγο να μην το βάλεις σε public repo άμεσα, αλλά περί ορέξεως.
DIMITRISG Δημοσ. 2 Αυγούστου 2014 Μέλος Δημοσ. 2 Αυγούστου 2014 Θα κοιτάξω κάποια στιγμή τη requests, το ανέβασα σε public repo: https://github.com/dglent/sansimera-qt
pmav99 Δημοσ. 2 Αυγούστου 2014 Δημοσ. 2 Αυγούστου 2014 1. Δεν ακολουθείς το PEP8. Δεν είναι υποχρεωτικό φυσικά, αλλά συνηθίζεται. Όποια σύμβαση και αν χρησιμοποιήσεις, απλά προσπάθησε να είσαι consistent. 2. Η removeFiles() θα έπρεπε να είναι staticmethod ή τελείως ξεχωριστή function. https://github.com/dglent/sansimera-qt/blob/master/sansimera_fetch.py#L42 3. Κάνεις κάτι περίεργο με τα pay και το ponth (αλήθεια τι ρόλο βαράει το "p" . Τα ορίζεις και σαν μεθόδους αλλά και σαν instance attributes. Πιθανά αυτό που θες να κάνεις είναι να χρησιμοποιήσεις property, αλλά δεν είμαι σίγουρος ότι έχω καταλάβει τι ακριβώς θέλεις να πετύχεις (δεν έχω τρέξει και τον κώδικα). Προσωπικά θα καταργούσα τα attributes και θα μετονόμαζα τις μεθόδους. Δηλαδή def calc_pay(self): imera = str(datetime.date.today()).split('-') imera = imera[1:] return imera[1] 4. Που δημιουργείς το cache? Στο φάκελο εγκατάστασης του προγράμματος; Νομίζω ότι η καλύτερη λύση αν θες persistance είναι μέσα στο ~/.config/supercaramba αν και αυτό θα το περιορίζει ανά user. Aν δεν θες peristance τότε στο /tmp οπότε δες και την βιβλιοθήκη tmpfile της standard library. 5. Τα αρχεία τα ανοιγοκλείνουμε με την with. Google it 6. Πιθανά να θες να προσθέσεις logging για να μπορείς να έχεις feedback αν κάτι πάει στραβά στους χρήστες του προγράμματος. 7. "Δεν βρέθηκαν γεγονότα, ελέγξτε τη σύνδεσή σας." Πιστεύω ότι μπορείς να ξεχωρίσεις πότε δεν βρέθηκαν γεγονότα και πότε υπάρχει πρόβλημα με τη σύνδεση
DIMITRISG Δημοσ. 3 Αυγούστου 2014 Μέλος Δημοσ. 3 Αυγούστου 2014 Τα κοιτάω ένα ένα 2: Το έβαλα σε staticmethod https://github.com/dglent/sansimera-qt/commit/6b8a1f28309d6497ffa2bfcc759e2a1d6955a6ae Πώς καταλαβαίνω ότι μια μέθοδος πρέπει να είναι στατική; Μήπως όταν δεν περιέχει μεταβλητές που ανήκουν στο namespace της κλάσης; Έψαξα να βρω συγκεκριμένη επεξήγηση αλλά και στο stackoverflow που έχει παρόμοιες ερωτήσεις, καμιά δεν απαντά στην ουσία. Το μόνο που συμπέραινα είναι ότι δεν χρειάζεται αρχικοποίηση η κλάση αλλά δεν έχω καταλάβει το πλεονέκτημα... To 5 δεν χρειάζεται ανάλυση, έχω δει την εξηγηση σου παλαιότερα στο Προγραμματισμός· το άλλαξα...
pmav99 Δημοσ. 11 Αυγούστου 2014 Δημοσ. 11 Αυγούστου 2014 Η staticmethod είναι μια μέθοδος που δεν χρησιμοποιεί τα attributes της class/instance. Τη χρησιμοποιείς όταν θέλεις να κρατήσεις μια συνάρτηση μέσα στο namespace μιας κλάσης για λόγους οργάνωσης του κώδικα. Ένα παράδειγμα χρήσης τους που θα δεις είναι όταν θέλεις να έχεις διαφορετικούς constructors class Vector(object): def __init__(self, x, y, z): self.x, self.y, self.z = x, y, z @staticmethod def from_vectors(v1, v2): v = v2 - v1 return Vector(v.x, v.y, v.z) @staticmethod def from_coords(coords): return Vector(*coords)
Προτεινόμενες αναρτήσεις
Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε
Πρέπει να είστε μέλος για να αφήσετε σχόλιο
Δημιουργία λογαριασμού
Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!
Δημιουργία νέου λογαριασμούΣύνδεση
Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.
Συνδεθείτε τώρα