stdin을 bash 스크립트에 전달한 다음 해당 bash 스크립트 내에서 호출되는 Python 스크립트에 전달하고 싶습니다.

stdin을 bash 스크립트에 전달한 다음 해당 bash 스크립트 내에서 호출되는 Python 스크립트에 전달하고 싶습니다.

filePython 스크립트를 호출하는 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

??????주어진 콘텐츠를 filebash 스크립트에 전달하기 위해 무엇을 채워야 할지 모르겠습니다.표준 입력으로파이썬 스크립트로 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/activatestdin(*)에서 읽은 내용은 ??????"아무것도"가 아니어야 합니다.

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, 표준 입력에서 읽기 시작하고, 입력을 표준 출력으로 인쇄합니다.

관련 정보