Search code examples
pythonencodingcolorssubprocess

subprocess stdout without colors


I am running a command line tool that returns a coloured output (similar to ls --color). I run this tool via subprocess:

process = subprocess.run(['ls --color'], shell=True, stdout=subprocess.PIPE)
process.stdout.decode()

But the result is, of course, with the color instructions like \x1b[m\x1b[m which makes further processing of the output impossible.

How can I remove the colouring and use pure text?


Solution

  • This works on my win10 and python 3.11 machine. Your command runs without any issue: In my IDE I can't see color, but this command works also subprocess.run(["ls", "--color=none"], shell=True, stdout=subprocess.PIPE).

    Valid arguments are on my machine:

    • 'never', 'no', 'none'
    • 'auto', 'tty', 'if-tty'
    • 'always', 'yes', 'force'

    Code:

    import subprocess
    
    process = subprocess.run(["ls", "-la"], shell=True, stdout=subprocess.PIPE)
    
    with open("dirList.txt", 'w') as f:
        f.write(process.stdout.decode())
    

    Output: total 14432

    drwxr-xr-x 1 Hermann Hermann       0 Nov 19 08:00 .
    drwxr-xr-x 1 Hermann Hermann       0 Aug 28  2021 ..
    -rw-r--r-- 1 Hermann Hermann       0 Jan 28 09:25 .txt
    -rw-r--r-- 1 Hermann Hermann    1225 Jan  6 00:51 00_Template_Program.py
    -rw-r--r-- 1 Hermann Hermann     490 Jan 15 23:33 8859_1.py
    -rw-r--r-- 1 Hermann Hermann     102 Jan 15 23:27 8859_1.xml