Olivier Miakinen <om+ writes:Le 11/07/2022 18:43, Thomas répondait Í Alain Ketterlin :
[...]Si l'ordre des options est sans importance, il vaut peut-être mieux en
donner une liste linéaire, comme le fait en général --help (ou le man).
Un synopsis "mkdir [-m mode] [-p]" aurait l'air d'imposer l'ordre.
ah ben tant mieux :
j'ai horreur de l'analyse de texte, et la lecture des arguments en fait
partie.
ça me parait bcp moins compliqué Í faire avec un ordre imposé.
Je te comprends : dans ton cas, tu peux analyser les arguments avec une
cascade de if.
Mais imagine que tu écrives "ls" : difficile d'exiger les
options dans l'ordre alphabétique.
Permets-moi d'être en complet désaccord avec toi sur ce point, parce que
lÍ l'usage est quasiment universel, du moins pour toutes les options avec
tiret.
Je veux dire que si la syntaxe proposée est :
usage: rapid [-v] -ni [-od dir] gui_file...
alors je m'attendrais Í ce que toutes ces écritures soient autorisées :
rapid -v -ni -od dir gui_file...
rapid -ni -v -od dir gui_file...
rapid -ni -od dir -v gui_file...rapid -v -od dir -ni gui_file...
rapid -od dir -v -ni gui_file...
rapid -od dir -ni -v gui_file...
Bien sͻr je m'interdirais seulement de mettre 'dir' ailleurs que juste
derrière '-od', ou de mettre 'gui_file...' ailleurs qu'Í la fin.
C'est la vision Posix, telle qu'elle est implémentée dans la fonction
getopt() -- sauf que les options doivent être mono-caractère. Dans ce
cas (options -v -n -o), on écrirait (en C) :
while ((opt = getopt(argc, argv, "vno:")) != -1) /* ":" = argument */
{
switch (opt)
{
case 'v':
...
break;
/* ... */
case 'o':
whatever = optarg;
...
break;
default:
wtf ("option inconnue");
}
}
if (optind >= argc)
wtf ("il faut au moins un gui_file");
/* les "gui_file" sont argv[optind] etc. */
getopt() s'occupe de tout, y compris permuter les éléments de argv si
nécessaire pour permettre "rapid gui1 -v gui2",
traiter l'option "--"
pour permettre ensuite un fichier appelé "-guifile" ou même "-v",
accepter "-vn" comme "-v -n",
accepter "-odir" comme "-o dir",
etc. J'en
oublie sͻrement.
Tellement pratique qu'on cherche rarement ailleurs. Par contre cela
oblige Í la fin Í vérifier la cohérence (si il y a une option -o il faut
qu'il y ait aussi l'option -n).
Olivier Miakinen <om+news@miakinen.net> writes:
> Le 11/07/2022 18:43, Thomas répondait Í Alain Ketterlin :
[...]
>>> Si l'ordre des options est sans importance, il vaut peut-être mieux en
>>> donner une liste linéaire, comme le fait en général --help (ou le man).
>>> Un synopsis "mkdir [-m mode] [-p]" aurait l'air d'imposer l'ordre.
>>
>> ah ben tant mieux :
>> j'ai horreur de l'analyse de texte, et la lecture des arguments en fait
>> partie.
>> ça me parait bcp moins compliqué Í faire avec un ordre imposé.
Je te comprends : dans ton cas, tu peux analyser les arguments avec une
cascade de if.
Mais imagine que tu écrives "ls" : difficile d'exiger les
options dans l'ordre alphabétique.
> Permets-moi d'être en complet désaccord avec toi sur ce point, parce que
> lÍ l'usage est quasiment universel, du moins pour toutes les options avec
> tiret.
>
> Je veux dire que si la syntaxe proposée est :
> usage: rapid [-v] -ni [-od dir] gui_file...
>
> alors je m'attendrais Í ce que toutes ces écritures soient autorisées :
> rapid -v -ni -od dir gui_file...
> rapid -ni -v -od dir gui_file...
> rapid -ni -od dir -v gui_file...
> rapid -v -od dir -ni gui_file...
> rapid -od dir -v -ni gui_file...
> rapid -od dir -ni -v gui_file...
>
> Bien sͻr je m'interdirais seulement de mettre 'dir' ailleurs que juste
> derrière '-od', ou de mettre 'gui_file...' ailleurs qu'Í la fin.
C'est la vision Posix, telle qu'elle est implémentée dans la fonction
getopt() -- sauf que les options doivent être mono-caractère. Dans ce
cas (options -v -n -o), on écrirait (en C) :
while ((opt = getopt(argc, argv, "vno:")) != -1) /* ":" = argument */
{
switch (opt)
{
case 'v':
...
break;
/* ... */
case 'o':
whatever = optarg;
...
break;
default:
wtf ("option inconnue");
}
}
if (optind >= argc)
wtf ("il faut au moins un gui_file");
/* les "gui_file" sont argv[optind] etc. */
getopt() s'occupe de tout, y compris permuter les éléments de argv si
nécessaire pour permettre "rapid gui1 -v gui2",
traiter l'option "--"
pour permettre ensuite un fichier appelé "-guifile" ou même "-v",
accepter "-vn" comme "-v -n",
accepter "-odir" comme "-o dir",
etc. J'en
oublie sͻrement.
Tellement pratique qu'on cherche rarement ailleurs. Par contre cela
oblige Í la fin Í vérifier la cohérence (si il y a une option -o il faut
qu'il y ait aussi l'option -n).
Olivier Miakinen <om+ writes:Le 11/07/2022 18:43, Thomas répondait Í Alain Ketterlin :
[...]Si l'ordre des options est sans importance, il vaut peut-être mieux en
donner une liste linéaire, comme le fait en général --help (ou le man).
Un synopsis "mkdir [-m mode] [-p]" aurait l'air d'imposer l'ordre.
ah ben tant mieux :
j'ai horreur de l'analyse de texte, et la lecture des arguments en fait
partie.
ça me parait bcp moins compliqué Í faire avec un ordre imposé.
Je te comprends : dans ton cas, tu peux analyser les arguments avec une
cascade de if.
Mais imagine que tu écrives "ls" : difficile d'exiger les
options dans l'ordre alphabétique.
Permets-moi d'être en complet désaccord avec toi sur ce point, parce que
lÍ l'usage est quasiment universel, du moins pour toutes les options avec
tiret.
Je veux dire que si la syntaxe proposée est :
usage: rapid [-v] -ni [-od dir] gui_file...
alors je m'attendrais Í ce que toutes ces écritures soient autorisées :
rapid -v -ni -od dir gui_file...
rapid -ni -v -od dir gui_file...
rapid -ni -od dir -v gui_file...rapid -v -od dir -ni gui_file...
rapid -od dir -v -ni gui_file...
rapid -od dir -ni -v gui_file...
Bien sͻr je m'interdirais seulement de mettre 'dir' ailleurs que juste
derrière '-od', ou de mettre 'gui_file...' ailleurs qu'Í la fin.
C'est la vision Posix, telle qu'elle est implémentée dans la fonction
getopt() -- sauf que les options doivent être mono-caractère. Dans ce
cas (options -v -n -o), on écrirait (en C) :
while ((opt = getopt(argc, argv, "vno:")) != -1) /* ":" = argument */
{
switch (opt)
{
case 'v':
...
break;
/* ... */
case 'o':
whatever = optarg;
...
break;
default:
wtf ("option inconnue");
}
}
if (optind >= argc)
wtf ("il faut au moins un gui_file");
/* les "gui_file" sont argv[optind] etc. */
getopt() s'occupe de tout, y compris permuter les éléments de argv si
nécessaire pour permettre "rapid gui1 -v gui2",
traiter l'option "--"
pour permettre ensuite un fichier appelé "-guifile" ou même "-v",
accepter "-vn" comme "-v -n",
accepter "-odir" comme "-o dir",
etc. J'en
oublie sͻrement.
Tellement pratique qu'on cherche rarement ailleurs. Par contre cela
oblige Í la fin Í vérifier la cohérence (si il y a une option -o il faut
qu'il y ait aussi l'option -n).
par ex, que diriez vous si je décidais de rendre dir obligatoire ?
usage: rapid [-v] -ni dir gui_file ...
au lieu de
usage: rapid [-v] -ni [-od dir] gui_file ...
https://semver.org/
qu'il faut attendre la prochaine version majeure pour changer les
options ?
accepter "-vn" comme "-v -n",
accepter "-odir" comme "-o dir",
est-ce que c'est qqch que les usagers utilisent bcp, ça ?
parce que moi je trouve ça plutÍ´t embêtant, avec notamment :
"-onv" = "-o -n -v", ou
"-onv" => dir = "nv" ?
Tellement pratique qu'on cherche rarement ailleurs. Par contre cela
oblige Í la fin Í vérifier la cohérence (si il y a une option -o il faut
qu'il y ait aussi l'option -n).
donc il faut gérer l'erreur Í ce moment lÍ (-o en trop ou -n manquant ?).
il faut aussi vérifier s'il y a des options non autorisées qui ont été
utilisées, vérifier je ne sais pas bien comment s'il y a bien eu un
argument pour -o, ...
getopt(), en plus d'ajouter une dépendance
par ex, que diriez vous si je décidais de rendre dir obligatoire ?
usage: rapid [-v] -ni dir gui_file ...
au lieu de
usage: rapid [-v] -ni [-od dir] gui_file ...
https://semver.org/
qu'il faut attendre la prochaine version majeure pour changer les
options ?
accepter "-vn" comme "-v -n",
accepter "-odir" comme "-o dir",
est-ce que c'est qqch que les usagers utilisent bcp, ça ?
parce que moi je trouve ça plutÍ´t embêtant, avec notamment :
"-onv" = "-o -n -v", ou
"-onv" => dir = "nv" ?
Tellement pratique qu'on cherche rarement ailleurs. Par contre cela
oblige Í la fin Í vérifier la cohérence (si il y a une option -o il faut
qu'il y ait aussi l'option -n).
donc il faut gérer l'erreur Í ce moment lÍ (-o en trop ou -n manquant ?).
il faut aussi vérifier s'il y a des options non autorisées qui ont été
utilisées, vérifier je ne sais pas bien comment s'il y a bien eu un
argument pour -o, ...
getopt(), en plus d'ajouter une dépendance
par ex, que diriez vous si je décidais de rendre dir obligatoire ?
usage: rapid [-v] -ni dir gui_file ...
au lieu de
usage: rapid [-v] -ni [-od dir] gui_file ...
https://semver.org/
qu'il faut attendre la prochaine version majeure pour changer les
options ?
accepter "-vn" comme "-v -n",
accepter "-odir" comme "-o dir",
est-ce que c'est qqch que les usagers utilisent bcp, ça ?
parce que moi je trouve ça plutÍ´t embêtant, avec notamment :
"-onv" = "-o -n -v", ou
"-onv" => dir = "nv" ?
Tellement pratique qu'on cherche rarement ailleurs. Par contre cela
oblige Í la fin Í vérifier la cohérence (si il y a une option -o il faut
qu'il y ait aussi l'option -n).
donc il faut gérer l'erreur Í ce moment lÍ (-o en trop ou -n manquant ?).
il faut aussi vérifier s'il y a des options non autorisées qui ont été
utilisées, vérifier je ne sais pas bien comment s'il y a bien eu un
argument pour -o, ...
getopt(), en plus d'ajouter une dépendance
accepter "-vn" comme "-v -n",
accepter "-odir" comme "-o dir",
est-ce que c'est qqch que les usagers utilisent bcp, ça ?
accepter "-vn" comme "-v -n",
accepter "-odir" comme "-o dir",
est-ce que c'est qqch que les usagers utilisent bcp, ça ?
accepter "-vn" comme "-v -n",
accepter "-odir" comme "-o dir",
est-ce que c'est qqch que les usagers utilisent bcp, ça ?
Thomas writes:par ex, que diriez vous si je décidais de rendre dir obligatoire ?
usage: rapid [-v] -ni dir gui_file ...
au lieu de
usage: rapid [-v] -ni [-od dir] gui_file ...
C'est Í toi de décider.
https://semver.org/
qu'il faut attendre la prochaine version majeure pour changer les
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, ça ?
parce que moi je trouve ça plutÍ´t embêtant, avec notamment :
"-onv" = "-o -n -v", ou
"-onv" => dir = "nv" ?
La seconde. Si un argument contient plusieurs options, la première
nécessitant un argument d'option s'impose : l'argument de l'option est
soit la suite, soit l'argument suivant.
Tellement pratique qu'on cherche rarement ailleurs. Par contre cela
oblige Í la fin Í vérifier la cohérence (si il y a une option -o il faut
qu'il y ait aussi l'option -n).
donc il faut gérer l'erreur Í ce moment lÍ (-o en trop ou -n manquant ?).
il faut aussi vérifier s'il y a des options non autorisées qui ont été
utilisées, vérifier je ne sais pas bien comment s'il y a bien eu un
argument pour -o, ...
Bon c'est quand même pas la mer Í boire.
VoilÍ ce que ça donnerait (dans
un langage imaginaire)
# argc et tableau argv fournis (arguments du prog Í partir de 1)
optind = 1
opt_v = opt_ni = opt_od = False
dir = "/valeur/par/défaut"
# analyser toutes les options
while optind < argc and argv[optind][0] == "-":
if argv[optind] in ["-v", "--verbose"]:
opt_v = True; optind += 1
elif argv[optind] in ["-ni", "--new-iork"]:
opt_ni = True; optind += 1
elif argv[optind] in ["-od", "--output-dir"] and optind+1 < argc:
opt_od = True; dir = argv[optind+1]; optind += 2
else:
wtf ("option inconnue")
# vérifier la cohérence
if opt_n == False and opd_od == True:
wtf ("-od sans -ni")
if optind == argc:
wtf ("pas de gui_file")
On peut affiner le cas d'erreur o͹ "-od" est le dernier élément.
On peut
aussi tester la duplication des options (si le opt_x est déjÍ True).
On
peut aussi prévoir "-oddir" (ça complique le test et la logique pour
l'incrémentation de optind), etc.
Le test de cohérence final a exactement la meme structure que celui que
tu fais en analysant les arguments (sauf qu'il teste seulement les
différents booléens).
Si tu veux autoriser des options après les gui_files, c'est un peu plus
compliqué (il faut mémoriser la position du premier gui_file, et tout
décaler dès que tu trouves une option).
(À mon avis, ce n'est pas assez gratifiant pour se passer de getopt() ou
s'écarter de ses conventions, mais chacun son truc.)
getopt(), en plus d'ajouter une dépendance
C'est Posix, il y a de fortes chances que la dépendance soit déjÍ
satisfaite.
Thomas <fantome.forums.tDeContes@free.fr.invalid> writes:
> par ex, que diriez vous si je décidais de rendre dir obligatoire ?
> usage: rapid [-v] -ni dir gui_file ...
> au lieu de
> usage: rapid [-v] -ni [-od dir] gui_file ...
C'est Í toi de décider.
> https://semver.org/
> qu'il faut attendre la prochaine version majeure pour changer les
> 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, ça ?
> parce que moi je trouve ça plutÍ´t embêtant, avec notamment :
> "-onv" = "-o -n -v", ou
> "-onv" => dir = "nv" ?
La seconde. Si un argument contient plusieurs options, la première
nécessitant un argument d'option s'impose : l'argument de l'option est
soit la suite, soit l'argument suivant.
>> Tellement pratique qu'on cherche rarement ailleurs. Par contre cela
>> oblige Í la fin Í vérifier la cohérence (si il y a une option -o il faut
>> qu'il y ait aussi l'option -n).
>
> donc il faut gérer l'erreur Í ce moment lÍ (-o en trop ou -n manquant ?).
> il faut aussi vérifier s'il y a des options non autorisées qui ont été
> utilisées, vérifier je ne sais pas bien comment s'il y a bien eu un
> argument pour -o, ...
Bon c'est quand même pas la mer Í boire.
VoilÍ ce que ça donnerait (dans
un langage imaginaire)
# argc et tableau argv fournis (arguments du prog Í partir de 1)
optind = 1
opt_v = opt_ni = opt_od = False
dir = "/valeur/par/défaut"
# analyser toutes les options
while optind < argc and argv[optind][0] == "-":
if argv[optind] in ["-v", "--verbose"]:
opt_v = True; optind += 1
elif argv[optind] in ["-ni", "--new-iork"]:
opt_ni = True; optind += 1
elif argv[optind] in ["-od", "--output-dir"] and optind+1 < argc:
opt_od = True; dir = argv[optind+1]; optind += 2
else:
wtf ("option inconnue")
# vérifier la cohérence
if opt_n == False and opd_od == True:
wtf ("-od sans -ni")
if optind == argc:
wtf ("pas de gui_file")
On peut affiner le cas d'erreur o͹ "-od" est le dernier élément.
On peut
aussi tester la duplication des options (si le opt_x est déjÍ True).
On
peut aussi prévoir "-oddir" (ça complique le test et la logique pour
l'incrémentation de optind), etc.
Le test de cohérence final a exactement la meme structure que celui que
tu fais en analysant les arguments (sauf qu'il teste seulement les
différents booléens).
Si tu veux autoriser des options après les gui_files, c'est un peu plus
compliqué (il faut mémoriser la position du premier gui_file, et tout
décaler dès que tu trouves une option).
(À mon avis, ce n'est pas assez gratifiant pour se passer de getopt() ou
s'écarter de ses conventions, mais chacun son truc.)
> getopt(), en plus d'ajouter une dépendance
C'est Posix, il y a de fortes chances que la dépendance soit déjÍ
satisfaite.
Thomas writes:par ex, que diriez vous si je décidais de rendre dir obligatoire ?
usage: rapid [-v] -ni dir gui_file ...
au lieu de
usage: rapid [-v] -ni [-od dir] gui_file ...
C'est Í toi de décider.
https://semver.org/
qu'il faut attendre la prochaine version majeure pour changer les
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, ça ?
parce que moi je trouve ça plutÍ´t embêtant, avec notamment :
"-onv" = "-o -n -v", ou
"-onv" => dir = "nv" ?
La seconde. Si un argument contient plusieurs options, la première
nécessitant un argument d'option s'impose : l'argument de l'option est
soit la suite, soit l'argument suivant.
Tellement pratique qu'on cherche rarement ailleurs. Par contre cela
oblige Í la fin Í vérifier la cohérence (si il y a une option -o il faut
qu'il y ait aussi l'option -n).
donc il faut gérer l'erreur Í ce moment lÍ (-o en trop ou -n manquant ?).
il faut aussi vérifier s'il y a des options non autorisées qui ont été
utilisées, vérifier je ne sais pas bien comment s'il y a bien eu un
argument pour -o, ...
Bon c'est quand même pas la mer Í boire.
VoilÍ ce que ça donnerait (dans
un langage imaginaire)
# argc et tableau argv fournis (arguments du prog Í partir de 1)
optind = 1
opt_v = opt_ni = opt_od = False
dir = "/valeur/par/défaut"
# analyser toutes les options
while optind < argc and argv[optind][0] == "-":
if argv[optind] in ["-v", "--verbose"]:
opt_v = True; optind += 1
elif argv[optind] in ["-ni", "--new-iork"]:
opt_ni = True; optind += 1
elif argv[optind] in ["-od", "--output-dir"] and optind+1 < argc:
opt_od = True; dir = argv[optind+1]; optind += 2
else:
wtf ("option inconnue")
# vérifier la cohérence
if opt_n == False and opd_od == True:
wtf ("-od sans -ni")
if optind == argc:
wtf ("pas de gui_file")
On peut affiner le cas d'erreur o͹ "-od" est le dernier élément.
On peut
aussi tester la duplication des options (si le opt_x est déjÍ True).
On
peut aussi prévoir "-oddir" (ça complique le test et la logique pour
l'incrémentation de optind), etc.
Le test de cohérence final a exactement la meme structure que celui que
tu fais en analysant les arguments (sauf qu'il teste seulement les
différents booléens).
Si tu veux autoriser des options après les gui_files, c'est un peu plus
compliqué (il faut mémoriser la position du premier gui_file, et tout
décaler dès que tu trouves une option).
(À mon avis, ce n'est pas assez gratifiant pour se passer de getopt() ou
s'écarter de ses conventions, mais chacun son truc.)
getopt(), en plus d'ajouter une dépendance
C'est Posix, il y a de fortes chances que la dépendance soit déjÍ
satisfaite.
je ne me rendais pas compte pour l'ordre des options, mais puisque tu
insistes et que vous êtes 2 Í le vouloir
je ne me rendais pas compte pour l'ordre des options, mais puisque tu
insistes et que vous êtes 2 Í le vouloir
je ne me rendais pas compte pour l'ordre des options, mais puisque tu
insistes et que vous êtes 2 Í le vouloir
Thomas , dans le message <62ceda82$0$24807$, a
écrit :je ne me rendais pas compte pour l'ordre des options, mais puisque tu
insistes et que vous êtes 2 Í le vouloir
Si c'est moi le deuxième
Et j'utilise bien d'autres programmes dont le système d'option ne suit pas
cette convention, Í commencer par ffmpeg.
Mais quand un programme suit la
convention et que je le sais, je l'utilise, et je ne suis pas le seul.
D'ailleurs, tout le monde connaͮt rm -rf.
Thomas , dans le message <62ceda82$0$24807$426a34cc@news.free.fr>, a
écrit :
> je ne me rendais pas compte pour l'ordre des options, mais puisque tu
> insistes et que vous êtes 2 Í le vouloir
Si c'est moi le deuxième
Et j'utilise bien d'autres programmes dont le système d'option ne suit pas
cette convention, Í commencer par ffmpeg.
Mais quand un programme suit la
convention et que je le sais, je l'utilise, et je ne suis pas le seul.
D'ailleurs, tout le monde connaͮt rm -rf.
Thomas , dans le message <62ceda82$0$24807$, a
écrit :je ne me rendais pas compte pour l'ordre des options, mais puisque tu
insistes et que vous êtes 2 Í le vouloir
Si c'est moi le deuxième
Et j'utilise bien d'autres programmes dont le système d'option ne suit pas
cette convention, Í commencer par ffmpeg.
Mais quand un programme suit la
convention et que je le sais, je l'utilise, et je ne suis pas le seul.
D'ailleurs, tout le monde connaͮt rm -rf.
mais surtout, Est-ce que, Í ton avis en tant qu'usager, ceci est
acceptable (c'est ça qu'Olivier avait soulevé) ?
$ ./rapid gui_file -v
Unexpected switch -v
Usage: ./rapid [-v] [gui_file]
      ./rapid [-v] -ni [-od output_directory] gui_file ...
$ ./rapid -ni -od p -v u
Unexpected switch -v
Usage: ./rapid [-v] [gui_file]
      ./rapid [-v] -ni [-od output_directory] gui_file ...
$ ./rapid -od p -ni -v u
Unexpected switch -od
Usage: ./rapid [-v] [gui_file]
      ./rapid [-v] -ni [-od output_directory] gui_file ...
D'ailleurs, tout le monde connaͮt rm -rf.
tiens c'est bizarre !
usage: rm [-f | -i] [-dPRrvW] file ...
qu'est-ce que ça signifie ?
Nicolas, je veux dire, par différence avec :
usage: rm [-fidPRrvW] file ...
mais surtout, Est-ce que, Í ton avis en tant qu'usager, ceci est
acceptable (c'est ça qu'Olivier avait soulevé) ?
$ ./rapid gui_file -v
Unexpected switch -v
Usage: ./rapid [-v] [gui_file]
      ./rapid [-v] -ni [-od output_directory] gui_file ...
$ ./rapid -ni -od p -v u
Unexpected switch -v
Usage: ./rapid [-v] [gui_file]
      ./rapid [-v] -ni [-od output_directory] gui_file ...
$ ./rapid -od p -ni -v u
Unexpected switch -od
Usage: ./rapid [-v] [gui_file]
      ./rapid [-v] -ni [-od output_directory] gui_file ...
D'ailleurs, tout le monde connaͮt rm -rf.
tiens c'est bizarre !
usage: rm [-f | -i] [-dPRrvW] file ...
qu'est-ce que ça signifie ?
Nicolas, je veux dire, par différence avec :
usage: rm [-fidPRrvW] file ...
mais surtout, Est-ce que, Í ton avis en tant qu'usager, ceci est
acceptable (c'est ça qu'Olivier avait soulevé) ?
$ ./rapid gui_file -v
Unexpected switch -v
Usage: ./rapid [-v] [gui_file]
      ./rapid [-v] -ni [-od output_directory] gui_file ...
$ ./rapid -ni -od p -v u
Unexpected switch -v
Usage: ./rapid [-v] [gui_file]
      ./rapid [-v] -ni [-od output_directory] gui_file ...
$ ./rapid -od p -ni -v u
Unexpected switch -od
Usage: ./rapid [-v] [gui_file]
      ./rapid [-v] -ni [-od output_directory] gui_file ...
D'ailleurs, tout le monde connaͮt rm -rf.
tiens c'est bizarre !
usage: rm [-f | -i] [-dPRrvW] file ...
qu'est-ce que ça signifie ?
Nicolas, je veux dire, par différence avec :
usage: rm [-fidPRrvW] file ...
accepter "-vn" comme "-v -n",
accepter "-odir" comme "-o dir",
est-ce que c'est qqch que les usagers utilisent bcp, ça ?
parce que moi je trouve ça plutÍ´t embêtant, avec notamment :
"-onv" = "-o -n -v", ou
"-onv" => dir = "nv" ?
La seconde. Si un argument contient plusieurs options, la première
nécessitant un argument d'option s'impose : l'argument de l'option est
soit la suite, soit l'argument suivant.
(si l'argument suivant est une option, que fait getopt() ?)
ce que je voulais dire c'est qu'Í la relecture c'est pas évident du
tout, il faut déchiffrer.
c'est qqch que j'évite au maximum.
ça fait bcp plus usine Í gaz que l'analyse linéaire,
donc - entre autres - plus difficile Í debugger et Í maintenir.
bon, si c'est nécessaire on va se le farcir ...
while optind < argc and argv[optind][0] == "-":
if argv[optind] in ["-v", "--verbose"]:
opt_v = True; optind += 1
elif argv[optind] in ["-ni", "--new-iork"]:
opt_ni = True; optind += 1
elif argv[optind] in ["-od", "--output-dir"] and optind+1 < argc:
opt_od = True; dir = argv[optind+1]; optind += 2
else:
wtf ("option inconnue")
si je te suis bien, tu considères qu'il n'est pas important de traiter
"--" ?
On peut affiner le cas d'erreur o͹ "-od" est le dernier élément.
hé oui ! lÍ tu utilises argv[optind+1] sans vérifier qu'il existe !
On peut aussi tester la duplication des options (si le opt_x est déjÍ
True).
dans ce cas lÍ on doit faire quoi ? ignorer ou une erreur ?
Le test de cohérence final a exactement la meme structure que celui que
tu fais en analysant les arguments (sauf qu'il teste seulement les
différents booléens).
je ne dirais pas "exactement", mais je crois que ça va aller.
(À mon avis, ce n'est pas assez gratifiant pour se passer de getopt() ou
s'écarter de ses conventions, mais chacun son truc.)
je ne comprend pas cette phrase.
C'est Posix, il y a de fortes chances que la dépendance soit déjÍ
satisfaite.
je programme en Ada, et ça ne fait pas partie de la norme Ada. donc ça
me fait dépendre de mon compilateur via ses "suppléments".
ça peut être gênant pour ceux qui voudraient utiliser un autre
compilateur que le mien.
>> accepter "-vn" comme "-v -n",
>> accepter "-odir" comme "-o dir",
>
> est-ce que c'est qqch que les usagers utilisent bcp, ça ?
> parce que moi je trouve ça plutÍ´t embêtant, avec notamment :
> "-onv" = "-o -n -v", ou
> "-onv" => dir = "nv" ?
La seconde. Si un argument contient plusieurs options, la première
nécessitant un argument d'option s'impose : l'argument de l'option est
soit la suite, soit l'argument suivant.
(si l'argument suivant est une option, que fait getopt() ?)
ce que je voulais dire c'est qu'Í la relecture c'est pas évident du
tout, il faut déchiffrer.
c'est qqch que j'évite au maximum.
ça fait bcp plus usine Í gaz que l'analyse linéaire,
donc - entre autres - plus difficile Í debugger et Í maintenir.
bon, si c'est nécessaire on va se le farcir ...
while optind < argc and argv[optind][0] == "-":
if argv[optind] in ["-v", "--verbose"]:
opt_v = True; optind += 1
elif argv[optind] in ["-ni", "--new-iork"]:
opt_ni = True; optind += 1
elif argv[optind] in ["-od", "--output-dir"] and optind+1 < argc:
opt_od = True; dir = argv[optind+1]; optind += 2
else:
wtf ("option inconnue")
si je te suis bien, tu considères qu'il n'est pas important de traiter
"--" ?
On peut affiner le cas d'erreur o͹ "-od" est le dernier élément.
hé oui ! lÍ tu utilises argv[optind+1] sans vérifier qu'il existe !
On peut aussi tester la duplication des options (si le opt_x est déjÍ
True).
dans ce cas lÍ on doit faire quoi ? ignorer ou une erreur ?
Le test de cohérence final a exactement la meme structure que celui que
tu fais en analysant les arguments (sauf qu'il teste seulement les
différents booléens).
je ne dirais pas "exactement", mais je crois que ça va aller.
(À mon avis, ce n'est pas assez gratifiant pour se passer de getopt() ou
s'écarter de ses conventions, mais chacun son truc.)
je ne comprend pas cette phrase.
C'est Posix, il y a de fortes chances que la dépendance soit déjÍ
satisfaite.
je programme en Ada, et ça ne fait pas partie de la norme Ada. donc ça
me fait dépendre de mon compilateur via ses "suppléments".
ça peut être gênant pour ceux qui voudraient utiliser un autre
compilateur que le mien.
accepter "-vn" comme "-v -n",
accepter "-odir" comme "-o dir",
est-ce que c'est qqch que les usagers utilisent bcp, ça ?
parce que moi je trouve ça plutÍ´t embêtant, avec notamment :
"-onv" = "-o -n -v", ou
"-onv" => dir = "nv" ?
La seconde. Si un argument contient plusieurs options, la première
nécessitant un argument d'option s'impose : l'argument de l'option est
soit la suite, soit l'argument suivant.
(si l'argument suivant est une option, que fait getopt() ?)
ce que je voulais dire c'est qu'Í la relecture c'est pas évident du
tout, il faut déchiffrer.
c'est qqch que j'évite au maximum.
ça fait bcp plus usine Í gaz que l'analyse linéaire,
donc - entre autres - plus difficile Í debugger et Í maintenir.
bon, si c'est nécessaire on va se le farcir ...
while optind < argc and argv[optind][0] == "-":
if argv[optind] in ["-v", "--verbose"]:
opt_v = True; optind += 1
elif argv[optind] in ["-ni", "--new-iork"]:
opt_ni = True; optind += 1
elif argv[optind] in ["-od", "--output-dir"] and optind+1 < argc:
opt_od = True; dir = argv[optind+1]; optind += 2
else:
wtf ("option inconnue")
si je te suis bien, tu considères qu'il n'est pas important de traiter
"--" ?
On peut affiner le cas d'erreur o͹ "-od" est le dernier élément.
hé oui ! lÍ tu utilises argv[optind+1] sans vérifier qu'il existe !
On peut aussi tester la duplication des options (si le opt_x est déjÍ
True).
dans ce cas lÍ on doit faire quoi ? ignorer ou une erreur ?
Le test de cohérence final a exactement la meme structure que celui que
tu fais en analysant les arguments (sauf qu'il teste seulement les
différents booléens).
je ne dirais pas "exactement", mais je crois que ça va aller.
(À mon avis, ce n'est pas assez gratifiant pour se passer de getopt() ou
s'écarter de ses conventions, mais chacun son truc.)
je ne comprend pas cette phrase.
C'est Posix, il y a de fortes chances que la dépendance soit déjÍ
satisfaite.
je programme en Ada, et ça ne fait pas partie de la norme Ada. donc ça
me fait dépendre de mon compilateur via ses "suppléments".
ça peut être gênant pour ceux qui voudraient utiliser un autre
compilateur que le mien.
ah donc tu n'es pas forcément hostile Í des choses différentes, super :-)
du coup, si je n'accepte pas "-odir", ça va ?
mais surtout, Est-ce que, Í ton avis en tant qu'usager, ceci est
acceptable (c'est ça qu'Olivier avait soulevé) ?
$ ./rapid gui_file -v
Unexpected switch -v
ah donc tu n'es pas forcément hostile Í des choses différentes, super :-)
du coup, si je n'accepte pas "-odir", ça va ?
mais surtout, Est-ce que, Í ton avis en tant qu'usager, ceci est
acceptable (c'est ça qu'Olivier avait soulevé) ?
$ ./rapid gui_file -v
Unexpected switch -v
ah donc tu n'es pas forcément hostile Í des choses différentes, super :-)
du coup, si je n'accepte pas "-odir", ça va ?
mais surtout, Est-ce que, Í ton avis en tant qu'usager, ceci est
acceptable (c'est ça qu'Olivier avait soulevé) ?
$ ./rapid gui_file -v
Unexpected switch -v
Le 13/07/2022 18:24, Thomas a écrit :mais surtout, Est-ce que, Í ton avis en tant qu'usager, ceci est
acceptable (c'est ça qu'Olivier avait soulevé) ?
$ ./rapid gui_file -v
Unexpected switch -v
Usage: ./rapid [-v] [gui_file]
      ./rapid [-v] -ni [-od output_directory] gui_file ...
Pour moi, il est tout Í fait normal de refuser une option -v après
le premier argument qui n'est pas une option (gui_file).
Cela dit, le message « Unexpected switch -v » est inapproprié. Selon
que ta syntaxe accepte ou non plus d'un fichier, ce sera soit :
File not found '-v' (sauf bien sͻr si le fichier -v existe)
soit :
No more than one file! (gui_file -v)
$ ./rapid -ni -od p -v u
Unexpected switch -v
Usage: ./rapid [-v] [gui_file]
      ./rapid [-v] -ni [-od output_directory] gui_file ...
LÍ ça me semble brutal pour l'utilisateur. Tant que tu en es Í parser
des options et pas des fichiers, il n'y a Í mon avis aucune raison
de refuser une option -v
$ ./rapid -od p -ni -v u
Unexpected switch -od
Usage: ./rapid [-v] [gui_file]
      ./rapid [-v] -ni [-od output_directory] gui_file ...
LÍ aussi, encore que ta syntaxe est assez particulière. Comme Nicolas
je ne sais pas ce que fait ton logiciel et je ne l'utiliserai sans
doute jamais,
seulement je crois comprendre que l'option -od ne peut
exister que dans le cas o͹ tu as déjÍ l'option -ni,
ce qui me semble
peu habituel.
Te serait-il possible d'accepter l'option -od dans tous les cas lors du
parsing, en disant juste 'attention cette option ne fait rien dans cette
version de la syntaxe' ? Bon, je ne suis pas sͻr que ce soit une bonne
idée non plus.
Ou alors tu changes la syntaxe pour qu'il y ait *une* sous-commande
obligatoire, plus les paramètres optionnels, et enfin les paramètres
positionnels. Par exemple :
Usage: ./rapid i [-v] gui_file
./rapid ni [-v] [-od output_directory] gui_file...
usage: rm [-f | -i] [-dPRrvW] file ...
qu'est-ce que ça signifie ?
Les options -i et -f sont contradictoires : l'une demande confirmation
Í chaque fichier alors que l'autre dit au contraire d'y aller par force
sans aucune demande de confirmation. Elles sont donc exclusives.
Le 13/07/2022 18:24, Thomas a écrit :
>
> mais surtout, Est-ce que, Í ton avis en tant qu'usager, ceci est
> acceptable (c'est ça qu'Olivier avait soulevé) ?
>
> $ ./rapid gui_file -v
> Unexpected switch -v
> Usage: ./rapid [-v] [gui_file]
> Â Â Â Â Â Â ./rapid [-v] -ni [-od output_directory] gui_file ...
Pour moi, il est tout Í fait normal de refuser une option -v après
le premier argument qui n'est pas une option (gui_file).
Cela dit, le message « Unexpected switch -v » est inapproprié. Selon
que ta syntaxe accepte ou non plus d'un fichier, ce sera soit :
File not found '-v' (sauf bien sͻr si le fichier -v existe)
soit :
No more than one file! (gui_file -v)
> $ ./rapid -ni -od p -v u
> Unexpected switch -v
> Usage: ./rapid [-v] [gui_file]
> Â Â Â Â Â Â ./rapid [-v] -ni [-od output_directory] gui_file ...
LÍ ça me semble brutal pour l'utilisateur. Tant que tu en es Í parser
des options et pas des fichiers, il n'y a Í mon avis aucune raison
de refuser une option -v
> $ ./rapid -od p -ni -v u
> Unexpected switch -od
> Usage: ./rapid [-v] [gui_file]
> Â Â Â Â Â Â ./rapid [-v] -ni [-od output_directory] gui_file ...
LÍ aussi, encore que ta syntaxe est assez particulière. Comme Nicolas
je ne sais pas ce que fait ton logiciel et je ne l'utiliserai sans
doute jamais,
seulement je crois comprendre que l'option -od ne peut
exister que dans le cas o͹ tu as déjÍ l'option -ni,
ce qui me semble
peu habituel.
Te serait-il possible d'accepter l'option -od dans tous les cas lors du
parsing, en disant juste 'attention cette option ne fait rien dans cette
version de la syntaxe' ? Bon, je ne suis pas sͻr que ce soit une bonne
idée non plus.
Ou alors tu changes la syntaxe pour qu'il y ait *une* sous-commande
obligatoire, plus les paramètres optionnels, et enfin les paramètres
positionnels. Par exemple :
Usage: ./rapid i [-v] gui_file
./rapid ni [-v] [-od output_directory] gui_file...
> usage: rm [-f | -i] [-dPRrvW] file ...
>
> qu'est-ce que ça signifie ?
Les options -i et -f sont contradictoires : l'une demande confirmation
Í chaque fichier alors que l'autre dit au contraire d'y aller par force
sans aucune demande de confirmation. Elles sont donc exclusives.
Le 13/07/2022 18:24, Thomas a écrit :mais surtout, Est-ce que, Í ton avis en tant qu'usager, ceci est
acceptable (c'est ça qu'Olivier avait soulevé) ?
$ ./rapid gui_file -v
Unexpected switch -v
Usage: ./rapid [-v] [gui_file]
      ./rapid [-v] -ni [-od output_directory] gui_file ...
Pour moi, il est tout Í fait normal de refuser une option -v après
le premier argument qui n'est pas une option (gui_file).
Cela dit, le message « Unexpected switch -v » est inapproprié. Selon
que ta syntaxe accepte ou non plus d'un fichier, ce sera soit :
File not found '-v' (sauf bien sͻr si le fichier -v existe)
soit :
No more than one file! (gui_file -v)
$ ./rapid -ni -od p -v u
Unexpected switch -v
Usage: ./rapid [-v] [gui_file]
      ./rapid [-v] -ni [-od output_directory] gui_file ...
LÍ ça me semble brutal pour l'utilisateur. Tant que tu en es Í parser
des options et pas des fichiers, il n'y a Í mon avis aucune raison
de refuser une option -v
$ ./rapid -od p -ni -v u
Unexpected switch -od
Usage: ./rapid [-v] [gui_file]
      ./rapid [-v] -ni [-od output_directory] gui_file ...
LÍ aussi, encore que ta syntaxe est assez particulière. Comme Nicolas
je ne sais pas ce que fait ton logiciel et je ne l'utiliserai sans
doute jamais,
seulement je crois comprendre que l'option -od ne peut
exister que dans le cas o͹ tu as déjÍ l'option -ni,
ce qui me semble
peu habituel.
Te serait-il possible d'accepter l'option -od dans tous les cas lors du
parsing, en disant juste 'attention cette option ne fait rien dans cette
version de la syntaxe' ? Bon, je ne suis pas sͻr que ce soit une bonne
idée non plus.
Ou alors tu changes la syntaxe pour qu'il y ait *une* sous-commande
obligatoire, plus les paramètres optionnels, et enfin les paramètres
positionnels. Par exemple :
Usage: ./rapid i [-v] gui_file
./rapid ni [-v] [-od output_directory] gui_file...
usage: rm [-f | -i] [-dPRrvW] file ...
qu'est-ce que ça signifie ?
Les options -i et -f sont contradictoires : l'une demande confirmation
Í chaque fichier alors que l'autre dit au contraire d'y aller par force
sans aucune demande de confirmation. Elles sont donc exclusives.