0

I'm trying to flush to stdout the output of a bioinformatic software written on Python code (Ete-Toolkit software). I tried the command (stdbuf) detailed on Force flushing of output to a file while bash script is still running but does not work because I have seen that stdbuf command it's only possible to execute from shell and not from bash(How to use stdbuf on a bash function).

Moreover from Python I discovered the following function that maybe could be interesting:

import sys
sys.stdout.flush()

But I don't know how can I implement inside the next bash script attached below.

The purpose is that if I only use the options -o and -e in the bash script (as you can see) the output is printed to logs_40markers in a not continuos manner which does not permits me to see the error. I can do it working directly from shell but my internet connection is not stable and practically each night there are a power outage and I have to restart again the command that will takes minimun one week.

#!/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

Thanks on advance if someone can give me some guide/advice,

Have a nice day,

Thank you,

Maggi

MagíBC
  • 77
  • 6

1 Answers1

0

one informatician colleague of me solved the problem using the PYTHONUNBUFFERED command.

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

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

To check the current situation of the process, type in the shell:

tail output.log file -f (means follow)

I hope that someone could find this solution helpful

MagíBC
  • 77
  • 6