CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

[Python] Programme en ligne de commande

MrGreez94
MrGreez94
Niveau 10
18 janvier 2017 à 13:37:24

Bonjour :-)

Je suis actuellement en train de réaliser un petit projet Python perso que je souhaiterais adapter pour pouvoir l'utiliser en ligne de commande. Je suis jusque là toujours resté à un stade de programme non packagé ou alors celui-ci comportait une interface graphique. j'aimerais donc faire en sorte que mon programme soit utilisable en ligne de commande histoire de monter en compétence, mais j'ai du mal à voir comment m'y prendre.

Pour vous donner le contexte, le programme a pour but de télécharger des scans de manga.
On lui donne nom du manga, un numéro de chapitre et il va tout chercher comme un grand.
Pour ça je procède de la manière suivante (il y a des étapes préalables mais je centre sur ma problématique):
- On donne un nom de manga
- On donne un numéro de chapitre
- Le programme va chercher l'URL de chaque page du chapitre
- Le programme télécharge les pages une par une

Pour faire simple, mon projet consiste à instancier une seule fois un gros objet "manga" dont on va exécuter la méthode "download([numéro_chapitre])".
Lors de l'instanciation de cet objet, le programme va récupérer les informations globales du manga (résumé, liste des chapitres, leur titre, ... ), chose qui n'a besoin d'être faite qu'une fois et qui prend un peu de temps (c'est une requête API).

Ensuite j'appelle la méthode "download([numéro_chapitre])" qui va dans un premier temps lister l'URL de chaque page si ça n'a pas déjà été fait une première fois, les stocker dans l'objet "manga" pour ne pas avoir à le refaire si on souhaite re-télécharger le même chapitre durant une même exécution.

Dans l'idéal je souhaiterais faire en sorte d'exécuter mon programme de la manière suivante:
>> manga_downloader --mangaid="shingeki-no-kyojin" --chapterid="89"

Problème n°1

Cela signifie que si je souhaite maintenant télécharger un autre chapitre du même manga:
>> manga_downloader --mangaid="shingeki-no-kyojin" --chapterid="88"
Il va (je crois) recréer l'objet, refaire une requête qui a déjà été faite juste avant et cela va prendre du temps pour rien.

Problème n°2

Encore pire, si je re-télécharge (par erreur ou non), le même chapitre du même manga:
>> manga_downloader --mangaid="shingeki-no-kyojin" --chapterid="88"
Il va recréer l'objet, donc refaire la requête et rechercher les URLs de chaque page alors qu'il vient de le faire

En debug mon programme fonctionne parfaitement, il n'y a pas ce problème. Avec une interface graphique le problème ne se poserait pas non plus vu que l'objet ne serait pas détruit tant que le programme s'exécute.

Je ne sais pas si j'ai bien réussi à cibler ma problématique, quelqu'un aurait-il un avis/conseil ?

shmemory
shmemory
Niveau 8
18 janvier 2017 à 13:56:49

Si j'ai bien compris ton problème c'est que ton programme se ferme après le téléchargement donc ça remet tout à zéro .

Ce que tu veux peut faire c'est un sous-shell dans ton programme qui executera tes commandes "download mangaid id"

#!/usr/bin/python

import re

cmd = input("commande >") 

mangas = list()

while( cmd != "END" ):

	if(re.match(r"(download|help) [a-zA-Z]* [0-9]*", cmd)):

		action = cmd.split(' ')[0]
		param = cmd.split(' ')[1]
		param2 = cmd.split(' ')[2]
	
		if(action == "download"):
			print("Telechargement de " + param + " chapitre n°" + param2)
		else:
			print("Commande inconnue")
	else:
		print("usage : action param1 param2")
		
	cmd = input("commande >")
		
print("Fin du programme")

Ce qui donne :

commande >blabla
usage : action param1 param2
commande >download naruto 22
Telechargement de naruto chapitre n°22

comme ça ta mémoire ne s'efface pas entre deux

MrGreez94
MrGreez94
Niveau 10
18 janvier 2017 à 14:06:13

je n'y avais pas pensé du tout, ça a l'air de régler complètement mon soucis :ouch2:

Merci beaucoup ! :-)

Sous forums
  • Aide à l'achat Mac
  • Internet
  • Macintosh
  • Création de sites web
  • Création de Jeux
  • Linux
  • Programmation
  • Steam Deck
  • Hardware
La vidéo du moment