subprocess.Popen() を利用して別の Python スクリプトを呼び出す場合、変数を引数として渡すと、予期しない問題が発生する可能性があります。この問題が発生する理由とその解決方法を調べてみましょう。
提供されたコードは、変数に格納された引数を使用してスクリプト mytool.py を実行する試みを示しています。ただし、shell=True パラメータが実行を妨げている可能性があります。
解決策:
変数の受け渡しを成功させるには、shell=True パラメータを省略します。 Unix 環境では、shell=True を有効にすると、Popen() による引数の解釈方法が変更され、望ましくない動作が発生する可能性があります。
この問題に対処する変更されたコード スニペットは次のとおりです。
import sys from subprocess import Popen, PIPE # populate list of arguments args = ["mytool.py"] for opt, optname in zip("-a -x -p".split(), "address port pass".split()): args.extend([opt, str(servers[server][optname])]) args.extend("some additional command".split()) # run script p = Popen([sys.executable or 'python'] + args, stdout=PIPE) # use p.stdout here... p.stdout.close() p.wait()
セキュリティ上の注意:
外部入力を伴うコマンドにshell=Trueを使用するとセキュリティが保護されます。危険。 Python のドキュメントに記載されているように、潜在的な脆弱性があるため、この方法はお勧めできません。
以上が「subprocess.Popen()」で変数の受け渡しが失敗する理由とその修正方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。