簡體   English   中英

為什么 python 子進程運行的 ripgrep 結果與 shell 中的 rg 運行不同

[英]Why ripgrep results from python subprocess run differ from rg run in the shell

如果我直接在 bash 中運行rg ,則 output 信息包括找到的文件名(在單獨的行上),然后在每個匹配的單獨行上包含該匹配的行號和內容:

11:38 (main *+) durl $ rg format
durl/__main__.py
35:            print(util.format_output(repo.url, line))
38:            print(util.format_output(repo.url, line, linenumber=n))

durl/util.py
15:def format_output(prefix, filename: str, linenumber: str=None) -> str:

但是如果我從 python subprocess進程運行中運行相同的命令,則匹配結果的顯示信息包括每行的文件名,包括行號。 為什么呢? (我在 MacOS 上運行)

11:38 (main *+) durl $ ipython
Python 3.9.5 (default, May  4 2021, 03:36:27)
Type 'copyright', 'credits' or 'license' for more information
IPython 7.27.0 -- An enhanced Interactive Python. Type '?' for help.

In [1]: import subprocess

In [2]: p = subprocess.run('rg format', text=True, shell=True, capture_output=True,)

In [3]: p.stdout
Out[3]: 'durl/__main__.py:            print(util.format_output(repo.url, line))\ndurl/__main__.py:            print(util.format_output(repo.url, line, linenumber=n))\ndurl/util.py:def format_output(prefix, filename: str, linenumber: str=None) -> str:\n'

In [4]: p.stdout.split('\n')
Out[4]:
['durl/__main__.py:            print(util.format_output(repo.url, line))',
 'durl/__main__.py:            print(util.format_output(repo.url, line, linenumber=n))',
 'durl/util.py:def format_output(prefix, filename: str, linenumber: str=None) -> str:',
 '']

因為 ripgrep 會檢測 stdout 上是否存在交互式 tty,如果存在,則將 output 格式更改為更“友好”。 例如,這與ls所做的相同。

他們是一樣的。 在您的示例中,您正在查看 Python 如何表示字符串,但如果您實際print它,您會發現它完全相同。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM