@kdjonua
Java

Как правильно выполнить команду с pipe'ами в call функции модуля subprocess python?

Есть такая комманда
screen -ls | tail -n +2 | head -n -2 | awk '{print $1}'| xargs -I{} screen -S {} -X quit

мне надо ее выполнить в python3.4 , как это правильно сделать?
  • Вопрос задан
  • 4483 просмотра
Пригласить эксперта
Ответы на вопрос 4
un1t
@un1t
Нужно указать параметр shell=True
subprocess.call('ls -la | grep i', shell=True)

Если нужно обрабатывать вывод и ошибки, то можно так:
>>> p = subprocess.Popen('ls -la|grep i', shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
>>> p
<subprocess.Popen object at 0x2173790>
>>> p.stdout
<_io.FileIO name=3 mode='rb'>
>>> p.stdout.read()
>>> p.stderr.read()
Ответ написан
Комментировать
dizballanze
@dizballanze
Software developer at Yandex
В пример из офф. документации:

output=`dmesg | grep hda`
# becomes
p1 = Popen(["dmesg"], stdout=PIPE)
p2 = Popen(["grep", "hda"], stdin=p1.stdout, stdout=PIPE)
p1.stdout.close()  # Allow p1 to receive a SIGPIPE if p2 exits.
output = p2.communicate()[0]
Ответ написан
@devel787
screen -ls | tail -n +2 | head -n -2 | awk '{print $1}'| xargs -I{} screen -S {} -X quit


Можно попробовать воспользоваться:
sh (previously pbs) is a full-fledged subprocess interface for Python that allows you to call any program as if it were a function
amoffat.github.io/sh/#piping

или
Plumbum is a small yet feature-rich library for shell script-like programs in Python
https://plumbum.readthedocs.org/en/latest/#cheat-sheet
Ответ написан
Комментировать
@kdjonua Автор вопроса
Java
Сделал так
p1 = Popen(['screen', '-la'], stdout=PIPE)
	p2 = Popen(['tail', '-n', '+2'], stdin=p1.stdout, stdout=PIPE)
	p3 = Popen(['head', '-n', '-2'], stdin=p2.stdout, stdout=PIPE)
	p4 = Popen(['awk', '"{print $1}"'], stdin=p3.stdout, stdout=PIPE)
	p5 = Popen(['xargs', '-I{}', 'screen', '-S', '{}', '-X', 'quit'], stdin=p4.stdout, stdout=PIPE)
	p1.stdout.close()
	p2.stdout.close()
	p3.stdout.close()
	p4.stdout.close()
	output = p4.communicate[0];
	print(output)

верно?
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы