我正在做一个编程课程(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)}"))
这指向了罪魁祸首:库中命名prepare
的lib50
函数,它是您的课程提供的一部分。这是试图运行一个 Git 命令,并将许多文件名传递给它的git add
命令。它从哪里得到的included
名单?那个,我们不知道。如果这个列表更短,问题就不会发生,但如果你没有办法缩短这个列表,知道这也无济于事。
加注kern.argmax
会有所帮助,但它可能不是您可以设置的。
使用具有不同(或可提升)最大值的不同操作系统可能会有所帮助。
不过,“正确答案”可能是让软件本身更智能。没有必要调用git add
这种特殊方式,每个文件都被列为一个大argv
向量。确实,程序可能应该调用而不是git add
直接调用。Python 程序可能应该与和标志(以及适合此特定函数的预期用途的任何其他标志)一起使用。git update-index
update-index
--stdin
-z
1其他系统现在也提供类似 Unix 的错误编号,即使它们不是基于 Unix。E2BIG
在 MacOS 上,这个特殊的错误是7 号错误。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句