Синтаксическая ошибка Python с awk, sprintf statment (2.7)

Я пытаюсь использовать одну из команд оболочки к сценарию Python, но борющийся с некоторой синтаксической ошибкой здесь.

Описание команды отсюда

echo /dev/bus/usb/`udevadm info --name=/dev/ttyUSB0 --attribute-walk | sed -n 's/\s*ATTRS{\(\(devnum\)\|\(busnum\)\)}==\"\([^\"]\+\)\"/\4/p' | head -n 2 | awk '{$1 = sprintf("%03d", $1); print}'` | tr " " "/"

Эта команда работает хорошо над терминалом, но пытающийся импортировать это сценарий Python

import subprocess
cmd = "/dev/bus/usb/`udevadm info --name=/dev/ttyUSB0 --attribute-walk | sed -n 's/\s*ATTRS{\(\(devnum\)\|\(busnum\)\)}==\"\([^\"]\+\)\"/\4/p' | head -n 2 | awk '{$1 = sprintf("%03d", $1); print}'` | tr " " "/""
p = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=True)
out, err = p.communicate()
print out
print err

Получите синтаксическую ошибку на sprintf операторе, который не объясняет много или не любит по модулю (%)

0
задан 13 September 2018 в 02:15

1 ответ

  • Вы не можете использовать "в ". Ваша команда разделяется на части

    cmd = "
    /dev/bus/usb/`udevadm info --name=/dev/ttyUSB0 --attribute-walk 
    | sed -n 's/\s*ATTRS{\(\(devnum\)\|\(busnum\)\)}==\"\([^\"]\+\)\"/\4/p' 
    | head -n 2 
    | awk '{$1 = sprintf("%03d", $1); print}'` 
    | tr " " "/"
    "
    

"На строке 1 и строке 7 вмешиваются в" на строках 5 и 6. Необходимо выйти из них. Строка 3 выходит из них правильно.

Посмотрите раздел строковых литералов.

  • Непротестированный, но, вероятно, необходимо сделать это как это:

    cmd = "
    /dev/bus/usb/`udevadm info --name=/dev/ttyUSB0 --attribute-walk 
    | sed -n 's/\s*ATTRS{\(\(devnum\)\|\(busnum\)\)}==\"\([^\"]\+\)\"/\4/p' 
    | head -n 2 
    | awk '{$1 = sprintf(\"%03d\", $1); print}'` 
    | tr \" \" \"/\"
    "
    

Возможно, это работает также:

cmd = "/dev/bus/usb/`udevadm info --name=/dev/ttyUSB0 --attribute-walk | sed -n 's/\s*ATTRS{\(\(devnum\)\|\(busnum\)\)}==\"\([^\"]\+\)\"/\4/p' | head -n 2 | awk '{$1 = sprintf('%03d', $1); print}'` | tr ' ' '/'"

Я изменился "в '.

1
ответ дан 27 October 2019 в 23:39

Другие вопросы по тегам:

Похожие вопросы: