os.system()在哪个linux shell下执行命令?

我使用/ bin / tcsh作为我的默认shell

但是,tcsh样式命令os.system('setenv VAR val')不适用于我。 但是os.system('export VAR = val')起作用。

所以我的问题是如何知道在哪个shell下的os.system()运行命令?

os.system()只是调用system()系统调用(“ man 3 system ”)。 在大多数* nixes这意味着你得到/bin/sh

请注意, export VAR=val在技​​术上不是标准语法(尽管bash了解它,我认为ksh也是)。 它在/bin/sh实际上是Bourne shell的系统上不起作用。 在这些系统上,您需要导出并设置为单独的命令。 (这也将与bash工作。)

刚刚从Python执行BASH ,然后是17.1。 子进程 – 子进程管理 – Python v2.7.3文档 ,我看到了executable参数; 它似乎工作:

 $ python Python 2.7.1+ (r271:86832, Sep 27 2012, 21:16:52) [GCC 4.5.2] on linux2 Type "help", "copyright", "credits" or "license" for more information. >>> import os >>> print os.popen("echo $0").read() sh >>> import subprocess >>> print subprocess.call("echo $0", shell=True).read() /bin/sh >>> print subprocess.Popen("echo $0", stdout=subprocess.PIPE, shell=True).stdout.read() /bin/sh >>> print subprocess.Popen("echo $0", stdout=subprocess.PIPE, shell=True, executable="/bin/bash").stdout.read() /bin/bash >>> print subprocess.Popen("cat <(echo TEST)", stdout=subprocess.PIPE, shell=True).stdout.read() /bin/sh: Syntax error: "(" unexpected >>> print subprocess.Popen("cat <(echo TEST)", stdout=subprocess.PIPE, shell=True, executable="/bin/bash").stdout.read() TEST 

希望这有助于某人,
干杯!

这些天你应该使用Subprocess模块,而不是os.system() 。 根据那里的文档,默认的shell是/bin/sh 。 我相信os.system()工作原理是一样的。

编辑:我还应该提到,子进程模块允许您通过env参数设置执行进程可用的环境。

如果你的命令是一个shell文件,并且该文件是可执行的,并且文件以“#!”开始,那么你可以选择你的shell。

 #!/bin/zsh Do Some Stuff 

你可以写这个文件,然后用subprocess.Popen(filename,shell=True)执行它,你就可以使用任何你想要的shell。

此外,一定要读这个关于os.systemos.system