如何设置shell变量在subprocess.Popen(在一个不太难看的方式......)
-
12-09-2019 - |
题
注意:这是不的同样的问题作为的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起来。
不隶属于 StackOverflow