Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Nb maxi d'arguments ?

18 views
Skip to first unread message

Michel Claveau - MVP

unread,
Mar 30, 2012, 2:40:44 AM3/30/12
to
Bonjour !

[Python 2.7 sous Windows]

Sauriez-vous quelle est la longueur maximale, pour les arguments passés
à un script, en ligne de commande ?

Parce que je tombe régulièrement sur ce message :
"Impossible de démarrer l'exécution. La liste des arguments est trop longue."

Au début, je pensais à une limite Windows, mais un petit programme
compilé avec TCC n'a pas d'erreur, avec les mêmes arguments...

Autre question, corrolaire, comment contourner la limite ?

Merci d'avance, pour toute réponse.

@-salutations
--
Michel Claveau


Alain Ketterlin

unread,
Mar 30, 2012, 3:39:10 AM3/30/12
to
"Michel Claveau - MVP"<enleverL...@XmclavXeauX.com.invalid>
writes:

> [Python 2.7 sous Windows]
>
> Sauriez-vous quelle est la longueur maximale, pour les arguments passés
> à un script, en ligne de commande ?
>
> Parce que je tombe régulièrement sur ce message : "Impossible de
> démarrer l'exécution. La liste des arguments est trop longue."

C'est normal, et c'est une bonne chose. Le shell (cmd.exe j'imagine)
doit placer tous ces arguments dans une zone de mémoire, qui est
transmise au processus (python) qui doit pouvoir y accéder. Ne pas
placer de limite présenterait un risque de déni de service.

> Au début, je pensais à une limite Windows, mais un petit programme
> compilé avec TCC n'a pas d'erreur, avec les mêmes arguments...

C'est étonnant. Il se peut qu'il y ait une différence entre le lancement
interactif et le lancement depuis un script, mais normalement ce n'est
pas le cas (note aussi que les variables d'environnement comptent aussi
dans le budget alloué à un processus).

> Autre question, corrolaire, comment contourner la limite ?

Placer tes arguments dans un fichier et lire le fichier. Mais cela
dépend de ce que fait ton programme : s'il itère simplement sur ses
paramètres, autant l'appeler plusieurs fois (c'est ce que fait xargs
sous linux).

-- Alain.

Francois Lafont

unread,
Mar 30, 2012, 6:19:47 AM3/30/12
to
Bonjour,

Le 30/03/2012 09:39, Alain Ketterlin a écrit :

>> Sauriez-vous quelle est la longueur maximale, pour les arguments passés
>> à un script, en ligne de commande ?
>>
>> Parce que je tombe régulièrement sur ce message : "Impossible de
>> démarrer l'exécution. La liste des arguments est trop longue."
>
> C'est normal, et c'est une bonne chose. Le shell (cmd.exe j'imagine)
> doit placer tous ces arguments dans une zone de mémoire, qui est
> transmise au processus (python) qui doit pouvoir y accéder. Ne pas
> placer de limite présenterait un risque de déni de service.

Question de béotien : j'avais cru lire dans je ne sais plus quel forum
(fr.comp.os.linux.configuration je crois), que sous Linux désormais un
script shell n'avait plus de limite en nombre d'arguments. Ce n'est pas
le cas ?

Désolé pour cette petite digression.


--
François Lafont

Alain Ketterlin

unread,
Mar 30, 2012, 7:12:43 AM3/30/12
to
Francois Lafont <francoi...@nospam.invalid> writes:

>>> Sauriez-vous quelle est la longueur maximale, pour les arguments passés
>>> à un script, en ligne de commande ?

>> C'est normal, et c'est une bonne chose. Le shell (cmd.exe j'imagine)
>> doit placer tous ces arguments dans une zone de mémoire, qui est
>> transmise au processus (python) qui doit pouvoir y accéder. Ne pas
>> placer de limite présenterait un risque de déni de service.
>
> Question de béotien : j'avais cru lire dans je ne sais plus quel forum
> (fr.comp.os.linux.configuration je crois), que sous Linux désormais un
> script shell n'avait plus de limite en nombre d'arguments. Ce n'est pas
> le cas ?

Oui et non : on peut augmenter la taille (via sysconf). A tout moment,
tu peux voir la taille max avec : getconf ARG_MAX.

-- Alain.

Francois Lafont

unread,
Mar 30, 2012, 7:25:37 AM3/30/12
to
Le 30/03/2012 13:12, Alain Ketterlin a écrit :

> Oui et non : on peut augmenter la taille (via sysconf).

Ah, sysconf est une commande ? Car sur ma Squeeze je ne la trouve pas.

> A tout moment,
> tu peux voir la taille max avec : getconf ARG_MAX.

Ok. Sur ma Squeeze (64 bits), j'ai :

$ getconf ARG_MAX
2097152

ce qui laisse quand même pas mal de marge. :-)

Merci bien Alain.
À+

--
François Lafont

Encolpe Degoute

unread,
Mar 30, 2012, 7:26:27 AM3/30/12
to
Le 30/03/2012 12:19, Francois Lafont a écrit :
> Question de béotien : j'avais cru lire dans je ne sais plus quel forum
> (fr.comp.os.linux.configuration je crois), que sous Linux désormais un
> script shell n'avait plus de limite en nombre d'arguments. Ce n'est
> pas le cas ? Désolé pour cette petite digression.

Cela dépend du shell utilisé (bash, zsh, tcsh...) et du programme lancé.
faire un 'grep error /var/log/toto2011*' avec plusieurs dizaine de
milliers de fichier correspondant à toto2011* peut mener à un nombre
trop important d'argument lorsque toto2011* est remplacé par toutes les
noms correspondants avant d'être envoyé à grep.

Il y aura le même problème avec un programme en python qui récupère ses
arguments de la ligne de commande. C'est un problème avec la fonction
d'extension des joker du shell, pas avec Python ou avec le script shell.

--
Encolpe DEGOUTE
http://encolpe.degoute.free.fr/
Logiciels libres, hockey sur glace et autres activités cérébrales

Alain Ketterlin

unread,
Mar 30, 2012, 7:34:55 AM3/30/12
to
Francois Lafont <francoi...@nospam.invalid> writes:

>> Oui et non : on peut augmenter la taille (via sysconf).
>
> Ah, sysconf est une commande ? Car sur ma Squeeze je ne la trouve pas.

T'as raison c'est systcl.

-- Alain.

Francois Lafont

unread,
Mar 30, 2012, 7:47:12 AM3/30/12
to
Le 30/03/2012 13:26, Encolpe Degoute a écrit :

> Cela dépend du shell utilisé (bash, zsh, tcsh...) et du programme lancé.
> faire un 'grep error /var/log/toto2011*' avec plusieurs dizaine de
> milliers de fichier correspondant à toto2011* peut mener à un nombre
> trop important d'argument lorsque toto2011* est remplacé par toutes les
> noms correspondants avant d'être envoyé à grep.
>
> Il y aura le même problème avec un programme en python qui récupère ses
> arguments de la ligne de commande. C'est un problème avec la fonction
> d'extension des joker du shell, pas avec Python ou avec le script shell.

Ok, merci pour ces précisions.


--
François Lafont

Francois Lafont

unread,
Mar 30, 2012, 7:48:38 AM3/30/12
to
Le 30/03/2012 13:34, Alain Ketterlin a écrit :

>>> Oui et non : on peut augmenter la taille (via sysconf).
>>
>> Ah, sysconf est une commande ? Car sur ma Squeeze je ne la trouve pas.
>
> T'as raison c'est systcl.

Chez moi :

$ sudo type systcl
sudo: type: command not found

Mais bon, ce n'est pas grave. J'ai déjà toutes les explications que je
souhaitais. :-)

--
François Lafont

Francois Lafont

unread,
Mar 30, 2012, 7:52:28 AM3/30/12
to
Le 30/03/2012 13:48, Francois Lafont a écrit :

> $ sudo type systcl
> sudo: type: command not found

Enfin :

# type systcl
bash: type: systcl : non trouvé

sera plus probant. ;-)

--
François Lafont

Alain Ketterlin

unread,
Mar 30, 2012, 8:39:35 AM3/30/12
to
Francois Lafont <francoi...@nospam.invalid> writes:

> # type systcl
> bash: type: systcl : non trouvé

Y'avait un piège : c'est sysctl (cé-té-el) du package procps. Désolé.

-- Alain.

Francois Lafont

unread,
Mar 30, 2012, 9:00:10 AM3/30/12
to
Le 30/03/2012 14:39, Alain Ketterlin a écrit :

> Y'avait un piège : c'est sysctl (cé-té-el) du package procps. Désolé.

Pas de souci. Merci encore.
À+

--
François Lafont

YBM

unread,
Mar 30, 2012, 7:35:03 PM3/30/12
to
Oui, mais non. sysctl c'est pour les paramètre du noyau (ce que n'est
pas le nombre d'arguments). getconf est founi avec la libc (en tout
cas sous Debian/Ubuntu).

Laurent Pointal

unread,
Mar 31, 2012, 4:50:17 AM3/31/12
to
Michel Claveau - MVP wrote:

> Bonjour !
>
> [Python 2.7 sous Windows]
>
> Sauriez-vous quelle est la longueur maximale, pour les arguments passés
> à un script, en ligne de commande ?

Google (pour "windows command line maximum arguments length") m'a indiqué:

http://support.microsoft.com/kb/830473

"""
Sur les ordinateurs qui exécutent Microsoft Windows XP ou une version
ultérieure, la longueur maximale de chaîne que vous pouvez utiliser à
l'invite de commandes est de 8 191 caractères. Sur les ordinateurs qui
exécutent Windows 2000 ou Windows NT 4.0, la longueur maximale de chaîne que
vous pouvez utiliser à l'invite de commandes est de 2 047 caractères.

Cette limitation s'applique à la ligne de commande, aux variables
d'environnement individuelles (telles que la variable PATH) qui sont
héritées par d'autres processus, et à toutes les extensions de variable
d'environnement. Si vous exécutez des fichiers de commandes à partir de
l'invite de commandes, cette limitation s'applique également au traitement
des fichiers de commandes.
"""

> Parce que je tombe régulièrement sur ce message :
> "Impossible de démarrer l'exécution. La liste des arguments est trop
> longue."
>
> Au début, je pensais à une limite Windows, mais un petit programme
> compilé avec TCC n'a pas d'erreur, avec les mêmes arguments...
>
> Autre question, corrolaire, comment contourner la limite ?

Le fichier de config qui devient fichier d'arguments...
Eventuellement la lecture sur stdin que tu peux alors prendre via un pipe ou
via une redirection de fichier.

A+
Laurent.

--
Laurent POINTAL - laurent...@laposte.net
3 allée des Orangers - 91940 Les Ulis - France
Tél. 01 69 29 06 59

Alain Ketterlin

unread,
Mar 31, 2012, 9:32:04 AM3/31/12
to
T'as raison, j'ai tout mélangé et confondu avec le kern.argmax des BSD.

-- Alain.
0 new messages