有没有办法检测os.system使用什么类型的shell?

时间:2017-04-02 05:35:39

标签: python shell cross-platform system-calls platform

如何检测shell os.system将调用哪个?

我不确定os.namesys.platform是否有效,因为系统可能配置为使用非标准shell,例如Windows上的cygwin shell。

如果我的脚本要在windows和linux上运行,我需要知道系统正在使用的shell来了解使用

构建命令的语法

1 个答案:

答案 0 :(得分:0)

os.system(command) docs州(由我总结和强调):

  

在子shell中执行命令(字符串)。这是通过实现的   调用标准C功能系统(),并具有相同的功能   限制。

<强> WINDOWS

对于Windows,我们可以从提到的os.system()docs中读取这个:

  

在Windows上,返回值是系统shell返回的值   运行命令后。 shell由Windows环境提供   变量COMSPEC :它通常是cmd.exe,它返回退出状态   命令运行;在使用非本机shell的系统上,请咨询您的   shell文档。

<强> UNIX

对于Unix,提到的os.system()文档读取:

  

在Unix上,返回值是编码进程的退出状态   为wait()指定的格式。请注意,POSIX未指定    C系统()函数返回值的含义

Linux docs似乎表明了关于提到的C函数:

  

system()通过调用/ bin / sh -c 命令执行命令中指定的命令,并在命令执行后返回   完成。

所以,我想可以说,在大多数(虽然不一定是全部)Unix系统中,来自python的os.system()调用将通过Bourne shell命令c.q执行。 /bin/sh -c