4

subprocessモジュールのドキュメントによると、そのデフォルトのシェルはです/bin/shが、私はそのような定数をハードコーディングすることへの根深い、そしておそらく不合理な嫌悪感を持っています。

したがって、で定義されている定数を参照することをお勧めしsubprocessます。私はこの定数をsubprocess 直接調べる方法を見つけることができませんでした。私が管理した最高のものは

def _getshpath():
    return subprocess.check_output('which sh', shell=True).strip()

また

def _getshpath():
    return subprocess.check_output('echo "$0"', shell=True).strip()

...どちらも悲惨なほど壊れやすいように見えます。なぜなら、それらの有効性は、最終的に私が最初に決定しようとしている特定の値に正確に依存するからです。(つまり、この実行可能ファイルの値が「/ bin / sh」でない場合、どちらの定義も簡単に無意味になる可能性があります。)

このパスを取得するためのベストプラクティスは何ですか(「/ bin / sh」としてハードコーディングせずに)?

ありがとう!

4

2 に答える 2

3

/bin/sh としてハードコーディングすることは完全に有効です。C の popen() のドキュメントを見ると、これも同様であることがわかります。/bin/sh は、構造上、システムの標準シェルです。

于 2012-04-27T23:17:38.657 に答える
1

あなたは試すことができます

>>> import os
>>> shell = os.environ['SHELL']
>>> print shell
'/bin/bash'

executableこれを使用して、 の引数を設定できますsubprocess.Popen

于 2012-04-27T23:12:48.203 に答える