Sie verwechseln zwei Probleme.
Zunächst kann Ihre Anwendung Eingaben von stdin erhalten. Dies hat nichts mit xargs
zu tun. In Ihrem Beispiel alle hardware.py
tun muss, ist sys.stdin
als Eingabedatei lesen, zB:
if __name__=='__main__':
for line in sys.stdin:
do_something(line)
Wenn Sie hardware.py Ausgabe zu erzeugen, dass andere Programme auf der ganzen Linie verwenden, schreiben Sie einfach an sys.stdout
Zweitens kann Ihre Anwendung Eingaben von Argumenten erhalten. Hier würden Sie xargs
verwenden. Beispiel:
xargs ./hardware.py < servers.txt # wie cat servers.txt | xargs ./hardware.py
Dies würde jedes "Wort" von servers.txt (nicht jede Zeile) als Argument an hardware.py übergeben (möglicherweise mehrere Argumente gleichzeitig). Dies wäre das gleiche wie das Ausführen hardware.py word1 word2 word3 word4 ...
Python speichert Befehlszeilenargumente im Array sys.arvg
. sys.argv[0]
wird der Befehlsname und sys.argv[1:]
werden alle Befehlszeilenargumente sein. In der Regel ist es jedoch besser, Ihre Befehlszeile mit argparse
zu verarbeiten.
Was Sie dort zeigen, ist * Standardeingabe *, aber was Sie * fragen * ist 'xargs'. Sie sind nicht dasselbe. Was wolltest du? – kojiro
Gibt es einen besonderen Grund, warum Sie nicht einfach die Textdatei in Python einlesen können? – ciferkey
Die Pipe verbindet nur den 'cat'' stdout' mit hardware.py 'stdin'. In hardware.py sollten Sie also nur die Daten aus dem 'stdin' lesen (z. B. data = raw_input()). –