BashからPythonにテキストブロックを渡す方法

BashからPythonにテキストブロックを渡す方法

bashに入れてからPythonに送信して、より多くの使用可能なテキストの断片があります。

だから私のコマンドラインは cat input_file | sh bash_file.sh

私のshファイルは

#!/bin/sh
input_data=$(cat)
"$input_data" | python3 ./python_file.py

私のPythonファイルは

contents = sys.stdin.read()
print(contents)

しかし、実際にはコンテンツには何も保存されません。シェルスクリプトファイルに追加したものをPythonでどのように印刷できますか?

答え1

$input_dataデフォルトでは正確ですが、標準入力として印刷しません。代わりにというコマンドを実行してみてください $input_data

printf次のように、シェルスクリプトの最後の行を変更して変数の内容を印刷するために使用されます。

printf "%s" "$input_data" | python3 ./python_file.py

答え2

シェルスクリプトの標準入力は、Pythonスクリプトの標準出力がシェルスクリプトのstdoutに渡される方法と同様に、スクリプトのpythonコマンドに渡されます。したがって、変数を使用する必要はありません。これで十分です。

#!/bin/sh
python python_file.py

cat file | sh script.shあなたはそれをあなたまたはより良いものと呼ぶことができます

sh script.sh < file

cat - | python script.py読みやすさが必要な場合は、stdinにwhereを使用するか、-この実行がstdinを待つというコメントを追加できます。

関連情報