Deutsch   English   Français   Italiano  
<871qupxml4.fsf@universite-de-strasbourg.fr.invalid>

View for Bookmarking (what is this?)
Look up another Usenet article

Path: ...!news.mixmin.net!aioe.org!K7PIs9tCGQ+WHJa7e6BylQ.user.46.165.242.75.POSTED!not-for-mail
From: Alain Ketterlin <alain@universite-de-strasbourg.fr.invalid>
Newsgroups: fr.comp.os.unix
Subject: Re: =?utf-8?Q?r=C3=A8gle?= pour =?utf-8?Q?=C3=A9crire?= les "usage:
 ..."
Date: Wed, 13 Jul 2022 13:45:43 +0200
Organization: =?utf-8?Q?Universit=C3=A9?= de Strasbourg
Message-ID: <871qupxml4.fsf@universite-de-strasbourg.fr.invalid>
References: <62c8c4eb$0$24781$426a74cc@news.free.fr>
	<tab00r$v6d7$1@dont-email.me> <62c98a7b$0$18716$426a74cc@news.free.fr>
	<87a69ix9rl.fsf@universite-de-strasbourg.fr.invalid>
	<62cc5318$0$18751$426a34cc@news.free.fr>
	<tahkuf$6ob$1@cabale.usenet-fr.net>
	<875yk3xsbg.fsf@universite-de-strasbourg.fr.invalid>
	<62ce256c$0$22264$426a34cc@news.free.fr>
Mime-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable
Injection-Info: gioia.aioe.org; logging-data="2416"; posting-host="K7PIs9tCGQ+WHJa7e6BylQ.user.gioia.aioe.org"; mail-complaints-to="abuse@aioe.org";
User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/25.2 (gnu/linux)
X-Notice: Filtered by postfilter v. 0.9.2
Cancel-Lock: sha1:uroeciClJqr5zc0saG0BeOjviME=
Bytes: 4823
Lines: 99

Thomas <fantome.forums.tDeContes@free.fr.invalid> writes:

> par ex, que diriez vous si je d=C3=A9cidais de rendre dir obligatoire ?
> usage: rapid [-v] -ni dir gui_file ...
> au lieu de
> usage: rapid [-v] -ni [-od dir] gui_file ...

C'est =C3=A0 toi de d=C3=A9cider.

> https://semver.org/
> qu'il faut attendre la prochaine version majeure pour changer les=20
> options ?

Pour une application, ajouter ou modifier le sens des options est selon
moi une changement d'API.

>> accepter "-vn" comme "-v -n",
>> accepter "-odir" comme "-o dir",
>
> est-ce que c'est qqch que les usagers utilisent bcp, =C3=A7a ?
> parce que moi je trouve =C3=A7a plut=C3=B4t emb=C3=AAtant, avec notamment=
 :
> "-onv" =3D "-o -n -v", ou
> "-onv" =3D> dir =3D "nv" ?

La seconde. Si un argument contient plusieurs options, la premi=C3=A8re
n=C3=A9cessitant un argument d'option s'impose : l'argument de l'option est
soit la suite, soit l'argument suivant.

-onv =3D> -o nv
-nvo dir =3D> -n -v -o dir
-nvovn =3D> -n -v -o vn

>> Tellement pratique qu'on cherche rarement ailleurs. Par contre cela
>> oblige =C3=A0 la fin =C3=A0 v=C3=A9rifier la coh=C3=A9rence (si il y a u=
ne option -o il faut
>> qu'il y ait aussi l'option -n).
>
> donc il faut g=C3=A9rer l'erreur =C3=A0 ce moment l=C3=A0 (-o en trop ou =
-n manquant ?).
> il faut aussi v=C3=A9rifier s'il y a des options non autoris=C3=A9es qui =
ont =C3=A9t=C3=A9=20
> utilis=C3=A9es, v=C3=A9rifier je ne sais pas bien comment s'il y a bien e=
u un=20
> argument pour -o, ...

Bon c'est quand m=C3=AAme pas la mer =C3=A0 boire. Voil=C3=A0 ce que =C3=A7=
a donnerait (dans
un langage imaginaire)

    # argc et tableau argv fournis (arguments du prog =C3=A0 partir de 1)
    optind =3D 1
    opt_v =3D opt_ni =3D opt_od =3D False
    dir =3D "/valeur/par/d=C3=A9faut"
    # analyser toutes les options
    while optind < argc and argv[optind][0] =3D=3D "-":
        if argv[optind] in ["-v", "--verbose"]:
            opt_v =3D True; optind +=3D 1
        elif argv[optind] in ["-ni", "--new-iork"]:
            opt_ni =3D True; optind +=3D 1
        elif argv[optind] in ["-od", "--output-dir"] and optind+1 < argc:
            opt_od =3D True; dir =3D argv[optind+1]; optind +=3D 2
        else:
            wtf ("option inconnue")
    # v=C3=A9rifier la coh=C3=A9rence
    if opt_n =3D=3D False and opd_od =3D=3D True:
        wtf ("-od sans -ni")
    if optind =3D=3D argc:
        wtf ("pas de gui_file")

On peut affiner le cas d'erreur o=C3=B9 "-od" est le dernier =C3=A9l=C3=A9m=
ent. On peut
aussi tester la duplication des options (si le opt_x est d=C3=A9j=C3=A0 Tru=
e). On
peut aussi pr=C3=A9voir "-oddir" (=C3=A7a complique le test et la logique p=
our
l'incr=C3=A9mentation de optind), etc.

Le test de coh=C3=A9rence final a exactement la meme structure que celui que
tu fais en analysant les arguments (sauf qu'il teste seulement les
diff=C3=A9rents bool=C3=A9ens).

Si tu veux autoriser des options apr=C3=A8s les gui_files, c'est un peu plus
compliqu=C3=A9 (il faut m=C3=A9moriser la position du premier gui_file, et =
tout
d=C3=A9caler d=C3=A8s que tu trouves une option).

(=C3=80 mon avis, ce n'est pas assez gratifiant pour se passer de getopt() =
ou
s'=C3=A9carter de ses conventions, mais chacun son truc.)

> getopt(), en plus d'ajouter une d=C3=A9pendance

C'est Posix, il y a de fortes chances que la d=C3=A9pendance soit d=C3=A9j=
=C3=A0
satisfaite.

-- Alain.