Bạn đang bối rối hai vấn đề.
Trước tiên, ứng dụng của bạn có thể nhận dữ liệu nhập từ stdin. Điều này không liên quan gì với xargs
. Trong ví dụ của bạn, tất cả hardware.py
cần phải làm là đọc sys.stdin
như các tập tin đầu vào, ví dụ:
if __name__=='__main__':
for line in sys.stdin:
do_something(line)
Nếu bạn muốn hardware.py để sản xuất ra các chương trình khác xuống dòng có thể sử dụng, chỉ cần viết để sys.stdout
Thứ hai, ứng dụng của bạn có thể nhận dữ liệu nhập từ các đối số. Đây là nơi bạn sẽ sử dụng xargs
. Ví dụ:
xargs ./hardware.py < servers.txt # giống như cat servers.txt | xargs ./hardware.py
Điều này sẽ chuyển mỗi "từ" của servers.txt (không phải mọi dòng dòng) làm đối số cho hardware.py (có thể nhiều đối số cùng một lúc). Điều này sẽ giống như chạy hardware.py word1 word2 word3 word4 ...
Python lưu trữ đối số dòng lệnh trong mảng sys.arvg
. sys.argv[0]
sẽ là tên lệnh và sys.argv[1:]
sẽ là tất cả các đối số dòng lệnh. Tuy nhiên, bạn thường xử lý tốt hơn dòng lệnh của mình bằng cách sử dụng argparse
.
Nguồn
2012-08-07 20:09:18
Nội dung bạn hiển thị là * đầu vào tiêu chuẩn *, nhưng những gì bạn * hỏi * là 'xargs'. Chúng không giống nhau. Bạn muốn gì? – kojiro
Có lý do cụ thể nào mà bạn không thể chỉ đọc trong tệp văn bản trong python không? – ciferkey
Đường ống chỉ kết nối 'cat'' stdout' với hardware.py' stdin'. Vì vậy, trong hardware.py, bạn chỉ nên đọc dữ liệu từ 'stdin' (ví dụ: data = raw_input()). –