0

注: これはPython: Persistent shell variables in subprocessと同じ質問ではありません。その質問は実際にはシェル変数ではなく環境変数に関するものです。

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(最初に試しました...)。それを行うための引数を悪用して(とにかく)、実際の作業(適切に表示するために短縮)することで、一緒にハックできます。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このクラッジ以外にシェル変数を設定する方法はありますか?

4

1 に答える 1

1

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

ただし、すべての初期化コマンドをパイプ経由でシェルに書き込むか、それらをファイルに書き込んで csh のビルトインで読み取らせることで、整理することができますsource

于 2009-12-04T07:50:22.047 に答える