我在/bin/sh
不存在的嵌入式环境中,所以当我致电posix.system()
或os.system()
时,它始终会返回-1
。
由于该环境,subprocess
模块不可用。我也不能创建管道。
我正在使用ɴᴀᴄʟ as glibc。
设置SHELL
环境变量似乎不起作用(它仍尝试打开/bin/sh
)。
那么有没有办法改变os.system()
调用的shell进程?
答案 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')