[Python] Daten aus Linux Pipe lesen
Hallo
Ich will ein Python-Script beim Starten mit Daten aus einem anderen Programm füttern können.
echo "hallo" | main.py
Das Script soll aber auch ohne Fehler oder merkwürdigem Verhalten aufgerufen werden können, ohne Daten mit einer Pipe zu übergeben.
Wie kann ich das in Python realisieren?
Mit merkwürdigem Verhalten meine ich, dass zum Beispiel aus stdin gelesen wird bis EOF gesendet wird.
AW: [Python] Daten aus Linux Pipe lesen
und wo ist da das Problem? Prüf einfach ob Parameter übergeben wurden. Falls nicht evtl STDIN horchen und hier info holen...
AW: [Python] Daten aus Linux Pipe lesen
Hast du das schon mal probiert? Es klappt nicht.
Wenn ich etwas mit | übergebe landet es nicht in sys.argv
---------- Post added at 21:57 ---------- Previous post was at 20:59 ----------
Bin jetzt zur Lösung mit sys.stdin.isatty() gekommen
Code:
#!/usr/bin/python
import sys
print sys.stdin.isatty()
AW: [Python] Daten aus Linux Pipe lesen
root@www3.bankenverband.de:~/Work > cat test.py
import sys
while 1:
try:
line = sys.stdin.readline()
except KeyboardInterrupt:
break
if not line:
break
print line
root@www3.bankenverband.de:~/Work > echo fraud is philanthropy | python test.py
fraud is philanthropy
root@www3.bankenverband.de:~/Work >
:-/
AW: [Python] Daten aus Linux Pipe lesen
Fraud4Life: Da wartet das Script auf EOF. Das ist was ich nicht wollte. Mit sys.stdin.isatty() kann man da ne schnelle Lösung erstellen. Finde nur leider nicht viel zu der Methode isatty(). Kann nicht genau sagen, was das ist und wie/warum das funktioniert.
AW: [Python] Daten aus Linux Pipe lesen
root@ws-fra1.win-ip.dfn.de:~/Work > cat sick.py
#!/usr/bin/env python
import sys
def main(argv = sys.argv):
if not sys.stdin.isatty():
for s in sys.stdin.readlines():
print "Pipe(d): " + s,
# Parameter, yo
L = sys.argv[1:]
if len(L)!=0:
print "CLI Parameter-List: " + str(L)
sys.exit(0)
pass
if __name__ == "__main__":
try:
main(sys.argv)
except KeyboardInterrupt:
pass
# EOF, yo
root@ws-fra1.win-ip.dfn.de:~/Work > ./sick.py
root@ws-fra1.win-ip.dfn.de:~/Work > ./sick.py siiiickk
CLI Parameter-List: ['siiiickk']
root@ws-fra1.win-ip.dfn.de:~/Work > ./sick.py siiiickk 123 456 no skills
CLI Parameter-List: ['siiiickk', '123', '456', 'no', 'skills']
root@ws-fra1.win-ip.dfn.de:~/Work > echo lol pipaments |./sick.py
Pipe(d): lol pipaments
root@ws-fra1.win-ip.dfn.de:~/Work > echo gangbangparty bei steffie > test.txt
root@ws-fra1.win-ip.dfn.de:~/Work > cat test.txt |./sick.py
Pipe(d): gangbangparty bei steffie
root@ws-fra1.win-ip.dfn.de:~/Work >