Как подключить вход к python по строкам из программы linux?
Я хочу передать вывод ps -ef
в python по строкам.
script Я использую это (first.py) -
#! /usr/bin/python
import sys
for line in sys.argv:
print line
К сожалению, "строка" разделяется на слова, разделенные пробелами. Так, например, если я делаю
echo "days go by and still" | xargs first.py
вывод, который я получаю,
./first.py
days
go
by
and
still
Как написать script так, чтобы выход был
./first.py
days go by and still
?
Ответы
Ответ 1
Я не совсем понимаю, почему вы хотите использовать аргументы командной строки вместо простого чтения с стандартного ввода. Python имеет простую идиому для итерации по строкам в stdin:
import sys
for line in sys.stdin:
sys.stdout.write(line)
Мой пример использования:
$ echo -e "first line\nsecond line" | python python_iterate_stdin.py
first line
second line
Пример использования:
$ echo "days go by and still" | python python_iterate_stdin.py
days go by and still
Ответ 2
Что вам нужно, popen
, что позволяет напрямую читать вывод команды, как если бы вы читали файл:
import os
with os.popen('ps -ef') as pse:
for line in pse:
print line
# presumably parse line now
Обратите внимание, что если вам нужен более сложный синтаксический анализ, вам нужно будет заглянуть в документацию subprocess.Popen
.