注意:这是的同样的问题作为的Python :在子持久性壳变量,这个问题实际上是有关环境变量,不shell变量

我想自动执行基本的基准,我在csh使用内置time命令外壳做的事情。可以通过设置具有相同名称的变量在壳调整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比这个组装机等外壳变量?

有帮助吗?

解决方案

您具有有限数目的选项进行通信,以一个子进程(调用参数,环境,和流)。由于设置一个shell变量是在更广泛的意义上修改子进程的内部状态,你所谓的“杂牌”,实际上是比较合理的。我不知道需要加载shell变量一种特殊的方式任何csh的变种。

不过,您可以通过通过管道写你的所有的初始化命令外壳,甚至可以将它们写入一个文件,并让他们通过CSH的source内置读neaten起来。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top