Вы путаете два вопроса.
Во-первых, ваше приложение может получать ввод от stdin. Это не имеет никакого отношения к xargs
. В вашем примере, все hardware.py
нужно сделать, это прочитать sys.stdin
в качестве входного файла, например:
if __name__=='__main__':
for line in sys.stdin:
do_something(line)
Если вы хотите hardware.py производить вывод, что другие программы вниз линии можно использовать, просто напишите sys.stdout
Во-вторых, ваше приложение может получать входные данные из аргументов. Здесь вы должны использовать xargs
. Например:
xargs ./hardware.py < servers.txt # такой же, как cat servers.txt | xargs ./hardware.py
Это будет передавать каждое «слово» server.txt (не каждая строка ) как аргумент hardware.py (возможно, сразу несколько аргументов). Это будет то же самое, что работает hardware.py word1 word2 word3 word4 ...
Python хранит аргументы командной строки в массиве sys.arvg
. sys.argv[0]
будет именем команды, а sys.argv[1:]
- все аргументы командной строки. Тем не менее, вы обычно лучше обрабатываете свою командную строку, используя argparse
.
Что вы показываете, есть * стандартный ввод *, но то, что вы * задаете *, является 'xargs'. Это не одно и то же. Кого вы хотели? – kojiro
Есть ли какая-то особая причина, которую вы не можете просто прочитать в текстовом файле в python? – ciferkey
Труба просто соединяет 'cat'' stdout' с hardware.py 'stdin'. Итак, в hardware.py вы должны просто прочитать данные из 'stdin' (например, data = raw_input()). –