문제

Python을 통해 다음 하나의 라이너를 모든 파일로 인쇄하려면 어떻게해야합니까?

python -c "import sys;print '>>',sys.argv[1:]" | dir *.*

구체적으로 파이썬 -C로 파이프하는 방법을 알고 싶습니다. DOS 또는 Cygwin 응답이 허용됩니다.

도움이 되었습니까?

해결책

데이터 파이프를 읽을 수 있습니다 ~ 안으로 sys.stdin을 읽는 파이썬 스크립트. 예를 들어:

ls -al | python -c "import sys; print sys.stdin.readlines()"

당신이하고 싶은 일이 완전히 명확하지 않습니다 (아마도 나는 어리석은 것일 수도 있습니다). 혼란은 Python 스크립트에서 데이터를 파이핑하는 예에서 나옵니다.

다른 팁

python -c "import os; print os.listdir('.')"

질문에있는 것처럼 형식을 적용하려면

python -c "import os; print '\n'.join(['>>%s' % x for x in os.listdir('.')])"

파이프를 사용하려면 사용하십시오 xargs:

ls | xargs python -c "import sys; print '>>', sys.argv[1:]"

또는 백틱 :

python -c "import sys; print '>>', sys.argv[1:]" `ls`

인쇄하려면 모두 파일 :

find . -type f

현재 디렉토리 파일 만 인쇄하려면

find . -type f -maxdepth 1

각 줄 앞에 ">>"를 포함시키려면

find . -type f -maxdepth 1 | xargs -L 1 echo ">>"

">>"와 echo의 $ 경로 사이의 공간을 원하지 않는다면

find . -type f -maxdepth 1 | xargs -L 1 printf ">>%s\n"

물론 이것은 모두 Cygwin을 사용하고 있습니다.

ls | python -c "import sys; print sys.stdin.read()"

파이프의 경우 Stdin을 평소처럼 읽으십시오

그래도 파이프하는 방법을 알고 싶습니다

파이프에 잘못된 길을 가졌습니다. 'Dir'의 출력을 Python에 공급하려면 'Dir'가 왼쪽에 있어야합니다. 예를 들어 :

dir "*.*" | python -c "import sys;[sys.stdout.write('>>%s\n' % line) for line in sys.stdin]"

(목록 이해력이있는 해킹은 세미콜론 이후 한 줄에 '진술'에 대한 블록을 소개하지 않기 때문입니다.)

분명히 Python-Native 솔루션 ( 'OS.Listdir')은 실제로 훨씬 좋습니다.

구체적으로 파이썬 -C로 파이프하는 방법을 알고 싶습니다.

보다 코발의 대답

프로그램을 통한 배관은 프로그램의 관점에서 투명합니다. 모든 프로그램은 표준 입력 스트림에서 입력되고 있음을 알고 있습니다.

일반적으로 양식의 쉘 명령

A | B

A의 출력을 B의 입력으로 리디렉션합니다.

따라서 "ASDF"가 표준 출력으로 가면 B가 표준 입력에 "ASDF"를 얻는다.

Python의 표준 입력 스트림은 다음과 같습니다 sys.stdin

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top