单个字符串参数的最大大小限制为131072。与python无关:
~$ /bin/echo "$(printf "%*s" 131071 "a")">/dev/null
~$ /bin/echo "$(printf "%*s" 131072 "a")">/dev/null
bash: /bin/echo: Argument list too long
实际上,MAX_ARG_STRLEN
它决定了单个字符串的最大大小:
作为自2.6.23以来的附加限制,一个参数不得超过MAX_ARG_STRLEN(131072)。如果您生成一个长调用,例如“ sh -c’使用长参数生成’”,这可能变得很重要。(由Xan Lopez和Ralf Wildenhues指出)
见的讨论ARG_MAX
,“参数数目和一个参数的最大长度”,并在这个问题上unix.stackexchange
。
您可以在中看到它binfmts.h
:
/*
* These are the maximum length and maximum number of strings passed to the
* execve() system call. MAX_ARG_STRLEN is essentially random but serves to
* prevent the kernel from being unduly impacted by misaddressed pointers.
* MAX_ARG_STRINGS is chosen to fit in a signed 32-bit integer.
*/
#define MAX_ARG_STRLEN (PAGE_SIZE * 32)
#define MAX_ARG_STRINGS 0x7FFFFFFF
~$ echo $(( $(getconf PAGE_SIZE)*32 ))
131072
您可以传递多个length的字符串131071
:
subprocess.check_call(['echo', "a"*131071,"b"*131071], executable='/bin/bash',stdout=open("/dev/null","w"))
但是单个字符串arg不能超过131071字节。