私はちょうどpythonサブプロセスモジュールで作業を始めました。pythonサブプロセスでのシェルの違い= TrueまたはFalse
コードsubprocess.call("ls", shell = False) and subprocess.call("ls", shell = True)
はどちらも同じ結果を返します。私はちょうど2つのシェルオプションの主な違いは何か知りたい。
私はちょうどpythonサブプロセスモジュールで作業を始めました。pythonサブプロセスでのシェルの違い= TrueまたはFalse
コードsubprocess.call("ls", shell = False) and subprocess.call("ls", shell = True)
はどちらも同じ結果を返します。私はちょうど2つのシェルオプションの主な違いは何か知りたい。
シェルがTrueの場合、指定されたコマンドは、シェルを介して実行されます。これは、主に、ほとんどのシステムシェルで提供される拡張制御フローのためにPythonを使用していて、シェルパイプ、ファイル名ワイルドカード、環境変数展開、ユーザーの自宅への展開などの他のシェル機能への便利なアクセスが必要な場合に役立ちますディレクトリ。しかし、Python自体は多くのシェルのような機能(特にglob、fnmatch、os.walk()、os.path.expandvars()、os.path.expanduser()、およびshutil)の実装を提供していることに注意してください。
これが改善することができます注入技術をシェルにあなたのコードを開くことができますが、ここで説明:
Windowsマシン上で、たとえば、シェルがfalseに設定された場合は、以下を参照:
をimport subprocess
subprocess.Popen("dir", shell = False)
このコードを実行すると、指定されたファイルが見つからないことを示すWindowsError: [Error 2]
が返されます。しかし、shellがTrueの場合、オブジェクトが返されます。これは、'dir'
がcmdによって 'パイプされている'ため、dirなどの組み込みコマンドが機能するためです。
同じことがsubprocess.callで機能します。