首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >强制从bash脚本代码内部刷新到stdout文件

强制从bash脚本代码内部刷新到stdout文件
EN

Stack Overflow用户
提问于 2022-05-19 15:16:08
回答 1查看 62关注 0票数 0

我正在尝试开发一个用Python代码(Ete软件)编写的生物信息软件的输出。我在Force flushing of output to a file while bash script is still running上尝试了详细的命令( stdbuf ),但是没有工作,因为我已经看到stdbuf命令只能从shell执行,而不能从bash(How to use stdbuf on a bash function)执行。

此外,在Python中,我发现了以下可能很有趣的函数:

代码语言:javascript
复制
import sys
sys.stdout.flush()

但我不知道如何在下面附加的下一个bash脚本中实现。

其目的是,如果我只使用bash脚本中的选项-o和-e (如您所见),输出将以不连续的方式打印到logs_40markers,这不允许我看到错误。我可以直接从shell工作,但我的互联网连接不稳定,实际上每晚都有停电,我必须重新启动命令,这将花费最少的一个星期。

代码语言:javascript
复制
#!/bin/bash
#$ -N tree
#$ -o logs_40markers
#$ -e logs_40markers
#$ -q all.q@compute-0-3
#$ -l mf=100G

stdbuf -oL

module load apps/etetoolkit-3.1.2

export QT_QPA_PLATFORM='offscreen'

ete3 build -w mafft_default-none-none-none -m sptree_fasttree_all -o provaflush --cogs coglist_species_filtered.txt -a multifasta_speciesunique.fa  --clearall --cpu 40 

&> logs_40markers

如果有人能给我一些指导/建议,请提前感谢,

祝您今天愉快,

谢谢,

马吉

EN

回答 1

Stack Overflow用户

发布于 2022-05-25 10:24:24

我的一个情报员同事用PYTHONUNBUFFERED命令解决了这个问题。

#!/bin/bash #$ -N tree #$ -o logs_40markers #$ -e logs_40markers #$ -q all.q@compute 0-3 #$ -l mf=100G

代码语言:javascript
复制
module load apps/etetoolkit-3.1.2

export QT_QPA_PLATFORM='offscreen'
export PYTHONUNBUFFERED="TRUE"

ete3 build -w mafft_default-none-none-none -m sptree_fasttree_all -o provaflush --cogs coglist_species_filtered.txt -a multifasta_speciesunique.fa  --clearall --cpu 40 --v 4

要检查进程的当前情况,输入shell:

tail output.log file -f (意思如下)

我希望有人能发现这个解决方案有帮助

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72307085

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档