0

I am trying to create a new print function in such a way that it prints colored text. "\033[1;31m" make the cursor print in red and "\033[0;0m" reverts it back.

The color changing works perfectly but built-in print function is printing a space between every instance. How this space can be avoided?

I know about sep and end but using sep='' will change the behaviour of the whole print function. I only want no gap between the leftmost letter and margin.

from builtins import print as b_print

def print(*args, **kwargs):
    b_print("\033[1;31m", *args, "\033[0;0m", **kwargs)

Output

print("Hello world")
>>><Space><red>Hello world</red>

Required

>>><red>Hello world</red>

What doesn't work

b_print("\033[1;31m", '\r', *args, "\033[0;0m", **kwargs)
# as there will be one more tab after \r

b_print("\033[1;31m", *args, "\033[0;0m", **kwargs, sep='')
# as it enforces seperator to be '' between all the args.
from builtins import print as p

b_print("\033[1;31m", '\b', *args,"\033[0;0m", **kwargs)
# as creating a new argument create a new space character
wjandrea
  • 28,235
  • 9
  • 60
  • 81
Shadowcoder
  • 962
  • 1
  • 6
  • 18

1 Answers1

1

You have to do a bit more of the work manually: Take a sep parameter, convert *args to str, and join on sep.

from builtins import print as b_print

def print(*args, sep=' ', **kwargs):
    b_print("\033[1;31m" + sep.join(map(str, args)) + "\033[m", **kwargs)

print("Hello", "world", 7, sep='-')

Demo:

print("Hello", "world", 7, sep='-', end='x')

Output is like:

<red>Hello-world-7</red>x
wjandrea
  • 28,235
  • 9
  • 60
  • 81