为什么我收到 OSError: [Errno 7] 参数列表太长:b'/usr/local/bin/git'?

用户14146411

我正在做一个编程课程(CS50W),它有一个命令可以自动将项目提交到github。它被称为 submit50。当试图通过这种方法将我的代码推送到 github 时,我这样做:

submit50 --verbose web50/projects/2020/x/capstone

我收到以下错误:

OSError: [Errno 7] Argument list too long: b'/usr/local/bin/git'

我真的不知道这里发生了什么。如果你能帮助我,我将不胜感激。

回溯的完整错误:

Traceback (most recent call last):
  File "/Library/Frameworks/Python.framework/Versions/3.8/bin/submit50", line 11, in <module>
    load_entry_point('submit50==3.0.2', 'console_scripts', 'submit50')()
  File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/submit50/__main__.py", line 147, in main
    user_name, commit_hash, message = lib50.push("submit50", args.slug, CONFIG_LOADER, prompt=prompt)
  File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/lib50/_api.py", line 69, in push
    with authenticate(remote["org"], repo=repo) as user, prepare(tool, slug, user, included):
  File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/contextlib.py", line 113, in __enter__
    return next(self.gen)
  File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/lib50/_api.py", line 326, in prepare
    _run(git(f"add -f {' '.join(shlex.quote(f) for f in included)}"))
  File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/lib50/_api.py", line 703, in _run
    with _spawn(command, quiet, timeout) as child:
  File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/contextlib.py", line 113, in __enter__
    return next(self.gen)
  File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/lib50/_api.py", line 674, in _spawn
    child = pexpect.spawn(
  File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/pexpect/pty_spawn.py", line 205, in __init__
    self._spawn(command, args, preexec_fn, dimensions)
  File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/pexpect/pty_spawn.py", line 303, in _spawn
    self.ptyproc = self._spawnpty(self.args, env=self.env,
  File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/pexpect/pty_spawn.py", line 315, in _spawnpty
    return ptyprocess.PtyProcess.spawn(args, **kwargs)
  File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/ptyprocess/ptyprocess.py", line 330, in spawn
    raise exception
OSError: [Errno 7] Argument list too long: b'/usr/local/bin/git'
Submission cancelled.
周二

“参数列表太长”是 Unix 风格的1错误,表明exec-like 函数的参数太长了。b'/usr/local/bin/git'这里部分具有误导性:这不是太长的部分。)/Library/Frameworks/Python.framework/前缀强烈表明您使用的是 MacOS,它具有基于 Unix 的 Mach-ish 内核,并且参数限制相对较小

sh-3.2$ sysctl kern.argmax
kern.argmax: 262144

这意味着最多有 256 kiB 的参数字符,包括命令本身和参数的所有字节,包括\0终止每个字节的字节。argv本身的长度通常也有限制细节因一个系统而异。例如,另请参见unix.stackexchange.com 站点上的这个问题

我现在还不清楚该怎么做。查看堆栈跟踪,我们找到了这对行(为了在此处发布目的,我已将其进一步拆分):

File "/Library/Frameworks/Python.framework/Versions/3.8/
        lib/python3.8/site-packages/lib50/_api.py", line 326, in prepare
  _run(git(f"add -f {' '.join(shlex.quote(f) for f in included)}"))

这指向了罪魁祸首:库中命名preparelib50函数,它是您的课程提供的一部分。这是试图运行一个 Git 命令,并将许多文件名传递给它的git add命令。它从哪里得到的included名单?那个,我们不知道。如果这个列表更短,问题就不会发生,但如果你没有办法缩短这个列表,知道这也无济于事。

加注kern.argmax会有所帮助,但它可能不是您可以设置的。

使用具有不同(或可提升)最大值的不同操作系统可能会有所帮助。

不过,“正确答案”可能是让软件本身更智能。没有必要调用git add这种特殊方式,每个文件都被列为一个大argv向量。确实,程序可能应该调用而不是git add直接调用Python 程序可能应该标志(以及适合此特定函数的预期用途的任何其他标志)一起使用。git update-indexupdate-index--stdin-z


1其他系统现在也提供类似 Unix 的错误编号,即使它们不是基于 Unix。E2BIG在 MacOS 上,这个特殊的错误7 号错误。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

间歇性“ OSError:[Errno 7]参数列表太长”,带有短命令(〜125个字符)

OSError:[Errno 36]文件名太长:

为什么Datetime的.timestamp()方法返回OSError:[Errno 22]无效参数?

Python:OSError:[Errno 22] 无效参数:'*.txt'

OSError:[Errno 22] udp连接的无效参数

Python OSError: [Errno 22] 无效参数

Pip错误,OSError Errno 22无效参数

如何修复OSError:[Errno 22]无效的参数:'\\?

OSError: [Errno 22] 无效参数:请求

OSError: [Errno 22] 无效参数: 'path'

为什么Python为文件名短于文件系统的限制而给出“ OSError:[Errno 36]文件名太长”?

如何处理OSError:[Errno 36]文件名太长

OSError [Errno 99]-python

Python OSError:[Errno 2]

Python熊猫to_csv导致OSError:[Errno 22]无效的参数

OSError:[Errno 22]无效的参数写入tar文件

Python-如何解决OSError:[Errno 22]无效的参数

OSError:[Errno 22]无效的参数:(从Github读取文件)

OSError:[Errno 22]无效的参数Python文件处理

OSError:[Errno 22]使用torch.load时参数无效

Aiogram send_message:OSError:[Errno 22]无效的参数

OSError: [Errno 22] 打开文件时参数无效

熊猫DataFrame.to_csv()OSError:[Errno 22]无效的参数和PermissionError:[Errno 13]权限被拒绝

Flask:OSError:[Errno 98]地址已在使用中-但是为什么?

打开文本文件时出现“ OSError:[Errno 36]文件名太长”

我正在使用xargs,但是参数列表太长

为什么突然收到ELIFECYCLE errno 1?

os.read()给出OSError:[Errno 22]读取大数据时参数无效

Python 正则表达式 - OSError: [Errno 22] 无效参数: