>>> 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)>>> outb''>>> print(out)b''
有什么想法/建议吗?
似乎git gc是一种特殊情况,其中输出重定向是不可能的.在另一个问题中建议使用打字稿,但是有更多知识的人可以解释这种行为吗?脚本方法不起作用,因为它没有退出fork.
解决方法 git gc真的是一个特例,请看这里:Trying to redirect ‘git gc’ output
尝试使用git status来查看差异.
更新
问题是一个很好的挑战.一位同事查看了GIT的源代码,发现如果进程没有在后台启动,git gc只会写入stdout.经过一番搜索,我遇到了pty library,并受到了https://stackoverflow.com/a/6953572/2776376的启发,找到了一个有效的解决方案.下面的代码捕获了git gc的stdout,尽管它必须写入文件.
#!/usr/bin/env pythonimport osimport ptyimport syslog_name = 'git_log.txt'def git_logger(): (child_pID,fd) = pty.fork() if child_pID == 0: #parent process sys.stdout.flush() os.execlp("git","git","gc") else: #child process output = os.read(fd,100) while True: try: output += os.read(fd,1024) except: break with open(log_name,'w') as log_file: log_file.write(output)if __name__ == "__main__": git_logger() with open(log_name,'r') as log_file: print(log_file.read())总结
以上是内存溢出为你收集整理的未捕获Python子进程“git gc”stderr全部内容,希望文章能够帮你解决未捕获Python子进程“git gc”stderr所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)