質問

注:これは Pythonのように、のないの同じ質問であります:サブプロセスの中に永続的なシェル変数、その質問には、環境変数ではなく、シェル変数について実際にあるように、

私は、組み込みのtimeコマンドシェルを使用してCSHでやっていることを基本的なベンチマークを自動化しようとしています。あなたは、次のようなシェルで同じ名前の変数を設定することにより、timeの出力を微調整することができます:

set time=(1000000000 "%U %S %E %P %W %X %D %K %M %F %R %I %O %r %s %k %w %c")

しかし、これは当然のことながら、環境変数ではありませんので、あなたは(私は...その最初に試さ)envコンストラクタでsubprocess.Popenパラメータでそれを渡すことはできません。あなたは<全角> が(とにかく、IMO)のそれをするcmd引数を乱用によって一緒にそれをハックして、(うまく表示するように短縮)あなたの実際の作業ができます:

time_cmd = 'set time=(1000000000 "%U %S %E %P %c"); time ./some_func'
p = subprocess.Popen(cmd, executable="/bin/csh", shell=True, ...)

、あなたが期待するよう、それは動作しますが、それは本当に行くための正しい方法ではないようだ(とあなたが別のシェルの振る舞いの束を微調整したい場合には、かなり恐ろしいcmdの建設につながることができます)。

この場しのぎ以外subprocessでシェル変数を設定するための他の方法はありますか?

役に立ちましたか?

解決

あなたは子プロセス(呼び出しの引数、環境、およびストリーム)と通信するためのオプションの数が限られています。シェル変数を設定すると、子プロセスの内部状態を変更し、より一般的な意味であるので、あなたは「その場しのぎ」は実際には非常に合理的であると呼んでいるもの。私は、シェル変数をロードする特別な方法を持っている任意のcshの変種を知りません。

しかし、あなたはパイプを経由してシェルにすべての初期化コマンドを書き、あるいはファイルに書き込むし、それらをCSHのsourceの組み込みによって読み取らせることによってそれをneatenことができます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top