Я пытаюсь использовать одну из команд оболочки к сценарию 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 операторе, который не объясняет много или не любит по модулю (%)
Вы не можете использовать "в ". Ваша команда разделяется на части
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 ' ' '/'"
Я изменился "в '.