I am running a script which internally calls a bash command and parses the output accordingly. For example i am calling this command
result = subprocess.check_output("rg result",shell=True)
print(output)
I get this output without any line number or anything
historyChecker.py: result = subprocess.check_output("rg --help",shell=True)
historyChecker.py: output = re.search(r'USAGE:',result)
If i run the same command in bash i get a different result
[~/history_checker/code]$ rg result
historyChecker.py
56: result = subprocess.check_output("rg --help",shell=True)
57: output = re.search(r'USAGE:',result)
any idea why this is happening and how we can solve this. Thanks
From the documentation of rg
:
-n
,--line-number
Show line numbers (1-based). This is enabled by default when searching in a terminal.
So when you run it in a terminal, this option is enabled. When you use subprocess.check_output()
, standard output is connected to a pipe, and this option isn't enabled.
Add the --line-number
option if you want them.
result = subprocess.check_output(["rg", "--line-number", "result"])
print(output)
You're also not doing anything that needs shell parsing, so pass the command line as a list and don't use shell=True
.