[英]Python's subprocess.Popen() results differ from command line?
[英]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.