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スクリプトに渡すために何を埋めるべきかわかりません。標準入力としてPythonスクリプトで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、標準入力から読み始め、入力を標準出力に印刷します。

おすすめ記事