0

注意:这与Python: Persistent shell variables in subprocess不是同一个问题,因为该问题实际上是关于环境变量,而不是 shell 变量。

我正在尝试使用 shell 内置time命令自动化我在 csh 中执行的基本基准测试。time您可以通过在 shell 中设置同名变量来调整输出,如下所示:

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当你想要调整一堆不同的 shell 行为时,可能会导致一些非常可怕的构造)。

subprocess除了这个kludge之外,还有其他方法可以设置shell变量吗?

4

1 回答 1

1

与子进程(调用参数、环境和流)进行通信的选项数量有限。由于设置 shell 变量在更一般的意义上是修改子进程的内部状态,所以您所说的“kludge”实际上是相当合理的。我不知道任何有特殊方式加载 shell 变量的 csh 变体。

但是,您可以通过管道将所有初始化命令写入 shell,或者甚至将它们写入文件并让 csh 的source内置命令读取它们来整理它。

于 2009-12-04T07:50:22.047 回答