Как перенаправить команду оболочки на вход Python script?
Это, вероятно, что-то действительно базовое, но я не могу найти для этого хорошего решения.
Мне нужно написать python script, который может принимать входные данные из такого канала:
$ some-linux-command | my_script.py
что-то вроде этого:
cat email.txt | script.py
Или это будет просто передано моим файлом .forward непосредственно из sendmail. Это означает, что входной файл может быть чем-то относительно большим, если у него есть вложение, и, вероятно, это будет электронное письмо, позже мне придется поместить в базу данных отправителя, тему и т.д., Но я написал сценарии базы данных в python, так что часть будет в порядке.
Основная проблема заключается в том, как захватить данные, поступающие из канала.
Ответы
Ответ 1
Используйте sys.stdin для чтения ввода. Пример:
Пример содержимого s.py:
import sys
data = sys.stdin.readlines()
print data
- Запуск:
[email protected]:~$ cat t.txt
alpha
beta
gamma
[email protected]:~$ cat t.txt | python ./s.py
['alpha\n', 'beta\n', 'gamma\n']
Вы также можете сделать python script в качестве оболочки script с помощью этого Shebang:
#!/usr/bin/env python
и изменение разрешения на "a + x"
[email protected]:~$ cat t.txt | ./s.py
['alpha\n', 'beta\n', 'gamma\n']
Ответ 2
прочитайте из sys.stdin, который является файлом типа object