这是我观察到的行为:
>>> out = subprocess.check_output("git gc", shell=True)
Counting objects: 4869, done.
Delta compression using up to 8 threads.
Compressing objects: 100% (1219/1219), done.
Writing objects: 100% (4869/4869), done.
Total 4869 (delta 3607), reused 4869 (delta 3607)
操作输出打印在STDERR
中。我想在变量中捕获这个,所以我将stderr发送到STDOUT
。但它没有抓住它。
>>> out = subprocess.check_output("git gc", shell=True, stderr=subprocess.STDOUT)
>>> out
b''
>>> print(out)
b''
有任何想法/建议吗?
似乎CFN AWS::DynamoDB::Table documentation是一种特殊情况,无法进行输出重定向。在另一个问题中建议使用打字稿,但是有更多知识的人可以解释这种行为吗?脚本方法不起作用,因为它没有退出分支。
答案 0 :(得分:1)
git gc
真的是一个特例,请看这里:
Trying to redirect 'git gc' output
尝试使用git status
查看差异。
问题是一个很好的挑战。一位同事查看了GIT的源代码,发现如果进程没有在后台启动,git gc
只会写入stdout
。经过一番搜索后,我遇到了pty library,受到https://stackoverflow.com/a/6953572/2776376的启发,找到了一个有效的解决方案。
以下代码捕获了stdout
的{{1}},尽管它必须被写入文件。
git gc
答案 1 :(得分:0)
git gc
may change its behavior depending whether its standard input/output/error streams are connected to a terminal or not (whether it thinks, it is run interactively or not)。如果你想要像在终端中运行它一样输出相同的输出;您可以使用伪tty(似乎没有命令行选项可以为git gc
配置所需的输出行为:--quiet
不接受参数,例如,与apt-get
一样1}}):
#!/usr/bin/env python
import pexpect # $ pip install pexpect
output, exitstatus = pexpect.run('git gc', withexitstatus=1)
基于pty
的解决方案的相关问题: