2011-12-12 14 views
13

Questo è probabilmente qualcosa di veramente semplice, ma non riesco a trovare una buona soluzione per questo. Ho bisogno di scrivere uno script python che può accettare input da un tubo di come questo:Come reindirizzare un comando della shell in output su un input di script Python?

$ some-linux-command | my_script.py 

qualcosa di simile:

cat email.txt | script.py 

O sarà solo convogliata dal mio file .forward direttamente da sendmail . Ciò significa che il file di input potrebbe essere qualcosa di relativamente grande se ha un allegato e probabilmente sarà un'e-mail, in seguito dovrò inserire un database nel mittente, nell'oggetto e così via, ma ho scritto script di database in python, così quella parte sarà OK. Il problema principale è come acquisire i dati che arrivano dalla pipe.

+0

perché sei fissato su pipe, non puoi scrivere quel risultato su file, e fare operazioni su di esso, più tardi? –

+5

@SrinivasReddyThatiparthy: pipe è l'essenza di Unix, il tuo commento non è valido. – Stan

risposta

3

lettura dalla sys.stdin, che è un file come oggetto

21

Usa sys.stdin di leggere l'input. Esempio:

contenuti Esempio di s.py:

import sys 
data = sys.stdin.readlines() 
print data 

- Running:

[email protected]:~$ cat t.txt 
    alpha 
    beta 
    gamma 

    [email protected]:~$ cat t.txt | python ./s.py 
    ['alpha\n', 'beta\n', 'gamma\n'] 

E 'possibile fare lo script Python come script di shell utilizza questo Shebang:

#!/usr/bin/env python 

e modifica dell'autorizzazione a 'a + x'

[email protected]:~$ cat t.txt | ./s.py 
['alpha\n', 'beta\n', 'gamma\n'] 
+0

Grazie, funziona, e per fortuna posso importare sys su quella scatola, (è solaris 10, ha problemi con l'importazione di altri moduli, per alcuni moduli getta un "ImportError: ld.so.1:/usr/local/bin/python: fatale: errore di riposizionamento: file /usr/local/lib/python2.6/lib-dynload/_socket.so: simbolo inet_aton: simbolo di riferimento non trovato "perché inet_pton su solaris.) – delta

+8

puoi accettarlo come risposta corretta se funziona. – DhruvPathak

Problemi correlati