Está confundiendo dos problemas.
Primero, su aplicación puede recibir información de stdin. Esto no tiene nada que ver con xargs
. En su ejemplo, todos hardware.py
tiene que hacer es leer sys.stdin
que el de entrada, por ejemplo:
if __name__=='__main__':
for line in sys.stdin:
do_something(line)
Si desea hardware.py producir una salida que otros programas en la línea pueden utilizar, acaba de escribir para sys.stdout
En segundo lugar, su aplicación puede recibir información de los argumentos. Aquí es donde usaría xargs
. Por ejemplo:
xargs ./hardware.py < servers.txt # igual que cat servers.txt | xargs ./hardware.py
Esto pasaría cada "palabra" de servers.txt (no cada línea) como un argumento para hardware.py (posiblemente múltiples argumentos a la vez). Esto sería lo mismo que ejecutar hardware.py word1 word2 word3 word4 ...
Python almacena argumentos de línea de comandos en la matriz sys.arvg
. sys.argv[0]
será el nombre del comando y sys.argv[1:]
serán todos los argumentos de la línea de comandos. Sin embargo, generalmente es mejor que proceses tu línea de comando usando argparse
.
Lo que muestra allí es * entrada estándar *, pero lo que * pregunta * es 'xargs'. No són la misma cosa. ¿Qué quieres? – kojiro
¿Hay alguna razón en particular por la que no puedas leer en el archivo de texto en Python? – ciferkey
El tubo simplemente conecta 'cat'' stdout' al hardware.py 'stdin'. Por lo tanto, en hardware.py, solo debe leer los datos del 'stdin' (por ejemplo, data = raw_input()). –