有没有办法改变os.system()调用的SHELL程序?

时间:2016-08-10 16:08:49

标签: python linux python-2.7 shell os.system

我在/bin/sh不存在的嵌入式环境中,所以当我致电posix.system()os.system()时,它始终会返回-1
由于该环境,subprocess模块不可用。我也不能创建管道。

我正在使用ɴᴀᴄʟ as glibc

设置SHELL环境变量似乎不起作用(它仍尝试打开/bin/sh

那么有没有办法改变os.system()调用的shell进程?

1 个答案:

答案 0 :(得分:3)

不,您无法更改shell os.system()使用的内容,因为该函数会调用system() C function,并且该函数将shell硬编码为/bin/sh

改为使用subprocess.call() function,并将executable参数设置为您要使用的shell:

subprocess.call("command", shell=True, executable='/bin/bash')

来自Popen() documentation(所有subprocess功能的基础):

  

在具有shell=True的Unix上,shell默认为/bin/sh。如果 args 是一个字符串,则该字符串指定要通过shell执行的命令。

  

如果shell=True,则在Unix上,可执行文件参数指定默认/bin/sh的替换shell。

如果您无法使用subprocess ,则无法使用管道,您只能使用os.spawn*() functions;将模式设置为os.P_WAIT以等待退出代码:

retval = os.spawnl(os.P_WAIT, '/bin/bash', '-c', 'command')