ホームページ > バックエンド開発 > Python チュートリアル > 「subprocess.Popen()」で変数の受け渡しが失敗する理由とその修正方法

「subprocess.Popen()」で変数の受け渡しが失敗する理由とその修正方法

Mary-Kate Olsen
リリース: 2024-11-28 22:17:13
オリジナル
306 人が閲覧しました

Why Does Variable Passing Fail in `subprocess.Popen()` and How Can I Fix It?

subprocess.Popen() 引数での変数の受け渡しのトラブルシューティング

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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート