例如,一些 git 命令需要注意 io 重定向git bundle
。我怀疑这与使用的底层“管道”命令有关。有一个很好的教程IO重定向 http://tldp.org/LDP/abs/html/io-redirection.html,以及与以下相关的类似问题的回答git 命令 https://stackoverflow.com/questions/28186162/how-do-i-store-the-output-of-a-git-command-in-a-variable。但是该解决方案不适用于allgit 命令,例如git bundle
.
eg.
$ /usr/bin/git bundle create /tmp/backup.bundle --all >/tmp/backup.txt 2>&1
$ ls -al /tmp
-rw-rw-r-- 1 myuser mygroup 4329 Jan 25 10:46 backup.bundle
-rw-rw-r-- 1 myuser mygroup 0 Jan 25 10:46 backup.txt
然而,从命令行我可以看到有一些有趣的输出:
$ /usr/bin/git bundle create /tmp/backup.bundle --all
Counting objects: 6, done.
Compressing objects: 100% (6/6), done.
Writing objects: 100% (6/6), 4.11 KiB | 0 bytes/s, done.
Total 6 (delta 0), reused 0 (delta 0)
那么为什么我不能通过 IO 重定向捕获这个呢?输出去哪儿了?
它不会去任何地方——或者更准确地说,Git 一开始就没有打印它。
各种 Git 命令都有一个-v
or --verbose
选项,以及一个-q
or --quiet
选项。 Verbose 使它们可以打印诸如计数、压缩和写入对象之类的内容。安静让他们不会打印这样的东西。这default,然而,是要检查isatty()
文件描述符上的结果,并根据结果设置或清除详细选项。
这意味着当您重定向输出(或使用 Python 中的命令subprocess
管道),它们默认是安静的,或者至少是非冗长的。 (安静可能比详细的开启更能抑制。)
有时您可以通过添加显式的详细信息来捕获详细输出-v
, e.g., git fetch -v
,但至少有一个小错误git fetch
它无法将选项传递给它运行的某些子命令,因此这并不适合所有情况(几周前我在这方面浪费了几个小时)。
The git bundle
命令缺少一个-v
首先是选项,因此您无法设置它。可以通过 pty 运行命令来获取详细输出,以便isatty()
说“是的,这个 I/O 设备是一个 tty”。这sh模块 https://amoffat.github.io/sh/可以做到这一点,虽然我自己没有使用过。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)