file
Python 스크립트를 호출하는 bash 스크립트가 있고 stdin을 통해 콘텐츠를 제공하고 싶습니다. 다음과 같이 bash 스크립트를 호출합니다.
./script.sh < file
내용은 다음과 같습니다 script.sh
.
#! /usr/bin/env bash
pushd /some/python/virtual/environment/working/dir
source venv/bin/activate
python main.py ??????
deactivate
popd
??????
주어진 콘텐츠를 file
bash 스크립트에 전달하기 위해 무엇을 채워야 할지 모르겠습니다.표준 입력으로파이썬 스크립트로 main.py
.
이것은 file
큰 텍스트 파일일 수 있으며 bash를 사용하는 read
것은아니요이상적인.
bash 스크립트를 호출할 때는 stdin이 필요합니다. 나는 무엇이든 main.py
.
이 딜레마를 해결하는 방법에 대한 아이디어가 있습니까?
다음에 추가
@cas의 답변을 통해 내가 어떤 맥락에서 script.sh
.
script.sh
나는 사용하고 싶다앞으로의 스크립트에는 다음이 ~/.forward
포함됩니다.
|/path/to/script.sh
어떤 접미사가 호출되는지 /path/to/script.sh
로그에 명확합니다. 간단한 테스트를 위해 Python 스크립트의 단순화된 버전을 사용하십시오. 예를 들면 다음과 같습니다.
|/path/to/simple/main.py
postfix가 실제로 main.py
표준 입력에서 메일 내용을 호출한다는 것을 증명하십시오. 하지만 이 조합은 먹히지 않는 것 같습니다.
답변1
main.py
스크립트가 올바르게 작성되고 stdin에서 읽는다고 가정그리고venv/bin/activate
stdin(*)에서 읽은 내용은 ??????
"아무것도"가 아니어야 합니다.
Python 이전에 stdin을 사용하는 bash 스크립트에는 이전 명령이 없으므로 Python이 이를 사용하기 시작합니다.
#/bin/bash
pushd /some/python/virtual/environment/working/dir
source venv/bin/activate
python main.py
deactivate
아니면 main.py
실행 파일을 만들어 직접 실행하세요 ./main.py
. 어느 쪽이든 작동 원리는 동일합니다.
<<<
(*) 모든 stdin을 변수로 캡처한 다음 변수를 first venv/bin/activate
및 로 파이핑하거나 리디렉션하는 것과 같은 추악한 일이 없다면 아마도 이 작업을 전혀 수행하지 못할 것입니다 main.py
.
여기서 무슨 일이 일어나고 있고 어떻게 작동하는지에 대한 매우 명확한 예를 보려면 다음 sh 스크립트를 고려하십시오 kitten.sh
.
#!/bin/sh
cat
단지 실행되고 cat
, 표준 입력에서 읽기 시작하고, 입력을 표준 출력으로 인쇄합니다.