나는 리눅스 파이프와 함께 사용할 수있는 파이썬 스크립트를 작성해야argparse를 사용하여 파이썬 스크립트에서 파이프를 통해 매개 변수를 보내는 방법은 무엇입니까?
나는 일부 매개 변수는 파이프 또는 같은 라인
의 사용의 예를 보낼 수있는 스크립트를 실행하려면 예상되는 출력을 내 스크립트를
echo "a" > list.txt
echo "b" >> list.txt
./run.py p1 p2 # ['p1', 'p2'] expected output
cat list.txt | ./run.py # ['a', 'b'] expected output
cat list.txt | ./run.py p1 p2 # ['p1', 'p2', 'a', 'b'] expected output
내가 시도 :
import argparse
parser = argparse.ArgumentParser()
parser.add_argument('args', nargs=argparse.REMAINDER)
args = parser.parse_args().args
print args
그것은 t의 매개 변수에서만 작동 그는 같은 라인 :
./run.py p1 p2 #['p1', 'p2'] OK
cat list.txt | ./run.py # [] Not OK
cat list.txt | ./run.py p1 p2 # ['p1', 'p2'] expected output
직접 실행'에서 표준 입력 처리기가 아니기 때문에 여기에 작동하지 않습니다 인수를 배관 .py'와 같이 원래의 파이썬 스크립트를 수정하지 않고'xargs'와 같은 도구를 사용하면 stdin – etopylight
에서 파이프 라인 된 인수를 사용하여 올바른 명령 행을 빌드하고 실행할 수 있습니다. "핸들러가 없어도 라이브러리가 아닌가? – Troncador
argparse를 stdin에서 읽으려면 'parser.add_argument ('infile ', nargs ='? ', type = argparse.FileType ('r '))를 추가하여'sys.stdin'을 사용할 수 있습니다. , default = sys.stdin)'parser.parse_args(). infile'에서 입력을 가져올 수 있습니다. – etopylight