1. ホーム
  2. python

Pythonスクリプトの戻り値をbashスクリプトに格納する

2023-07-25 04:22:47

質問

bashスクリプトからpythonスクリプトを実行し、pythonスクリプトの出力を変数に格納したいのですが、どうすればよいでしょうか。

私のpythonスクリプトでは、私はいくつかのものを画面に印刷し、最後に私は文字列を返します。

sys.exit(myString) 

bashスクリプトで、以下のようにしました。

outputString=`python myPythonScript arg1 arg2 arg3 `

しかし、その後に outputString の値をチェックすると echo $outputString Pythonスクリプトが画面に出力していたものはすべて取得できましたが ではなく 戻り値 myString !

どうすればいいのでしょうか?

EDIT: Pythonスクリプトによって作成されたファイルがどこにあるか教えてくれるから、文字列が必要なんだ。私は次のようなことをしたいのです。

fileLocation=`python myPythonScript1 arg1 arg2 arg1`
python myPythonScript2 $fileLocation

どのように解決するのですか?

sys.exit(myString) は、quot;この文字列を返す"という意味ではない。もし、文字列を sys.exit , sys.exit はその文字列をエラーメッセージとみなし、その文字列を stderr . プログラム全体の戻り値に最も近い概念は、その 終了ステータス で、これは整数でなければなりません。

標準エラー出力に書き込まれる出力をキャプチャしたい場合。 のようなことができます。

python yourscript 2> return_file

bashスクリプトでこのようなことができます。

output=$((your command here) 2> &1)

に渡された値のみを捕捉することは保証されません。 sys.exit に渡された値だけを捕らえることを保証するものではありません。標準エラー出力に書き込まれた他のすべてのものは、ロギング出力やスタックトレースも含めてキャプチャされます。

の例です。

test.py

print "something"
exit('ohoh') 

t.sh

va=$(python test.py 2>&1)                                                                                                                    
mkdir $va

bash t.sh

編集

なぜかわかりませんが、その場合、メインスクリプトと他の2つのスクリプトを書くことになります...。Pythonとbashを混ぜるのは、本当に必要なとき以外は無意味です。

import script1
import script2

if __name__ == '__main__':
    filename = script1.run(sys.args)
    script2.run(filename)