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

lim*_*imi 9 python linux shell

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

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

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

sda*_*aau 10

刚刚从Python读取执行BASH,然后是17.1.subprocess - 子进程管理 - 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
Run Code Online (Sandbox Code Playgroud)

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


Kam*_*iel 9

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

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


Lau*_*ves 5

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

请注意,这export VAR=val在技​​术上不是标准语法(虽然bash理解它,我认为ksh也是如此).它不适用于/bin/sh实际上是Bourne shell的系统.在这些系统上,您需要导出并设置为单独的命令.(这也适用bash.)