Я хотел бы запустить команду Bash из Python. Мой код:

process = subprocess.Popen(('ifconfig -s'), stdout=subprocess.PIPE, shell=True)
output = process.communicate()[0]
lcd.message(output)
sleep(2)
lcd.clear()

Это выполняет "ifconfig -s", и вывод отображается на ЖК-дисплее 16x2. Слишком много информации для этого дисплея. Итак, новая команда:

ifconfig | awk '$1 {print $1}' FS="  " ORS=,

Прекрасно работает в оболочке, но у меня есть проблемы в коде Python. Когда я просто изменяю «ifconfig -s», я получаю ошибки. Я думаю, что это связано с> '<кавычками ...

Не могли бы вы помочь мне заставить новый ifconfig работать со старым кодом?

1 ответ1

0
process = subprocess.Popen( 
                            r"ifconfig | awk '$1 {print $1}' FS=' ' ORS=,", 
                            stdout=subprocess.PIPE,
                            shell=True
                           )
output = process.communicate()[0]
lcd.message(output)
sleep(2)
lcd.clear()

Если 'shell = True' и последовательность передана, команда и ее аргументы должны быть перечислены как отдельные элементы последовательности, например ('ifconfig', '- s').
Если строка передается, как указано выше, ipc легко достигается, потому что вся строка передается в shell, когда shell равен true.
Чтобы передать последовательность и сделать «IPC»,

process1 = subprocess.Popen( 
                           [ 'ifconfig'],
                           stdout=subprocess.PIPE
                           )
process2 = subprocess.Popen( 
                           [ 'awk','$1 {print $1}', 'FS=" "', 'ORS=,'],
                           stdout=subprocess.PIPE,
                           stdin=process1.stdout
                           )
output = process2.communicate()[0]
lcd.message(output)
sleep(2)
lcd.clear()

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .