2016-07-16 3 views

答えて

0

Straight out of the Docs:

シェルがTrueの場合、指定されたコマンドは、シェルを介して実行されます。これは、主に、ほとんどのシステムシェルで提供される拡張制御フローのためにPythonを使用していて、シェルパイプ、ファイル名ワイルドカード、環境変数展開、ユーザーの自宅への展開などの他のシェル機能への便利なアクセスが必要な場合に役立ちますディレクトリ。しかし、Python自体は多くのシェルのような機能(特にglob、fnmatch、os.walk()、os.path.expandvars()、os.path.expanduser()、およびshutil)の実装を提供していることに注意してください。

これが改善することができます注入技術をシェルにあなたのコードを開くことができますが、ここで説明:

Shell Injection Shell=True

Windowsマシン上で、たとえば、シェルがfalseに設定された場合は、以下を参照:

import subprocess 

subprocess.Popen("dir", shell = False) 

このコードを実行すると、指定されたファイルが見つからないことを示すWindowsError: [Error 2]が返されます。しかし、shellがTrueの場合、オブジェクトが返されます。これは、'dir'がcmdによって 'パイプされている'ため、dirなどの組み込みコマンドが機能するためです。

同じことがsubprocess.callで機能します。

関連する問題