Подтвердить что ты не робот

Как подключить вход к 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

?

4b9b3361

Ответ 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.