подпроцесс grep для строки, завершающейся обратной косой чертой

#python #bash #grep #subprocess

#python #bash #grep #подпроцесс

Вопрос:

Я хочу использовать подпроцесс для grep для строки, которая заканчивается обратной косой чертой:

 product = "myProduct"
 

итак, в bash, если я сделаю:

 zgrep -n 'myProduct\' file_of_products.txt.gz
 

это работает (я получаю кучу строк). Сейчас пытаюсь на python:

 import subprocess
product = "myProduct\"
command = f"""zgrep -n "{product}" {filename}"""
return_code, output = subprocess.getstatusoutput(command)
 

Я получаю;

 '/bin/sh: 1: Syntax error: Unterminated quoted string'
 

Комментарии:

1. попробуйте: product = r"myProduct\"

2. Это тоже было мое предположение. Я сделал. Я получаю: '/bin/grep: Trailing backslash' (я должен был указать в вопросе)

3. Вероятно, вам следует попробовать 4 обратных косых черты в Python. ` is the escape character, ` — это буквальная обратная косая черта. Вам нужно 2 в bash, поэтому 4 в Python.

4. Затем попробуйте: command = f"zgrep -n '{product}' '{filename}'"

5. @anubhava: работает идеально. Спасибо, сир. Не могли бы вы опубликовать это в качестве ответа?

Ответ №1:

Вы можете использовать этот переработанный код с необработанной строкой и одинарными кавычками:

 import subprocess
product = r"myProduct\"
command = f"zgrep -n '{product}' '{filename}'"
return_code, output = subprocess.getstatusoutput(command)