ホームページ >バックエンド開発 >Python チュートリアル >シェルを実行せずに変数を「subprocess.Popen()」に適切に渡すにはどうすればよいですか?
Subprocess.Popen() での変数受け渡しの問題
変数に格納されている引数を subprocess.Popen() に渡そうとすると、一部のユーザーが困難を経験する。これは、次のような引数を扱う場合に特に当てはまります:
servers[server]['address'] servers[server]['port'] servers[server]['pass']
以下に示すようにこれらの変数を Popen() コマンドに直接適用すると、エラーが発生する可能性があります:
p = subprocess.Popen( ["python mytool.py -a ", servers[server]['address'], "-x", servers[server]['port'], "-p", servers[server]['pass'], "some additional command"], shell=True, stdout=subprocess.PIPE )
解決策: シェルの実行を無効にする
この問題を解決するには、 Popen() 呼び出しの shell=True 引数。これにより、引数がシェルによって特別に扱われることがなくなり、代わりに文字列として渡すことができるようになります。
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 を使用すると、セキュリティが確保されることに注意してください。リスク。ユーザー入力を潜在的な脆弱性から保護するための代替方法を常に検討してください。
以上がシェルを実行せずに変数を「subprocess.Popen()」に適切に渡すにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。