这是您的操作系统限制,例如:
>>> import os
>>> os.execl('/bin/ls', 'ls', 'c'*10**7)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/lib/python2.7/os.py", line 314, in execl
execv(file, args)
OSError: [Errno 7] Argument list too long
在您的情况下是否有必要在命令行上传递数据(您可以使用管道/文件/套接字等代替吗?)?您可以使用拆分的命令行参数多次运行该命令吗?见Solving “mv: Argument list too long”。
如果传递的环境太大,你可能会得到同样的错误:
>>> os.execle('/usr/bin/env', 'env', {'envvar': 'c'*10**9})
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/lib/python2.7/os.py", line 322, in execle
execve(file, args[:-1], env)
OSError: [Errno 7] Argument list too long
解决方案是清理传递的环境以避免未使用的大型环境变量。
The limits might be hardcoded in the kernel source.