web-dev-qa-db-ja.com

あるpythonスクリプトから別のスクリプトへの戻り値

2つのファイルがあります。script1.pyとscript2.pyです。 script1.pyからscript2.pyを呼び出し、script2.pyからの値をscript1.pyに返す必要があります。しかし、問題は、script1.pyが実際にosを通じてscript2.pyを実行することです。

script1.py:

import os
print(os.system("script2.py 34"))

script2.py

import sys
def main():
    x="Hello World"+str(sys.argv[1])
    return x

if __name__ == "__main__":
    x= main()

ご覧のとおり、script2に値を取得できますが、script1には戻せません。どうやってやるの?注:script2.pyは、コマンドライン実行のように呼び出す必要があります。それが私がOSを使用している理由です。

10
codingsplash

OK、私があなたを正しく理解しているなら、

  • 別のスクリプトに引数を渡す
  • 別のスクリプトから元の呼び出し元への出力を取得する

サブプロセスモジュールの使用をお勧めします。最も簡単な方法は、 check_output() 関数を使用することです。

引数を指定してコマンドを実行し、その出力をバイト文字列として返します。

サンプルソリューション:

script1.py

import sys
import subprocess
s2_out = subprocess.check_output([sys.executable, "script2.py", "34"])
print s2_out

script2.py:

import sys
def main(arg):
    print("Hello World"+arg)

if __name__ == "__main__":
    main(sys.argv[1])
16

あるpython "script"から別の値に値を返すための推奨される方法は、スクリプトをPythonモジュールとしてインポートし、関数を直接呼び出すことです。

_import another_module

value = another_module.get_value(34)
_

ここで、_another_module.py_は次のとおりです。

_#!/usr/bin/env python
def get_value(*args):
    return "Hello World " + ":".join(map(str, args))

def main(argv):
    print(get_value(*argv[1:]))

if __name__ == "__main__":
    import sys
    main(sys.argv)
_

_another_module_をインポートして、コマンドラインからスクリプトとして実行できます。コマンドラインスクリプトとして実行する必要がない場合は、main()関数と_if __name__ == "__main__"_ブロックを削除できます。

また、 Call pythonスクリプトを入力し、pythonサブプロセスを使用するスクリプト で入力します。

9
jfs