如何强制os.system()使用bash而不是shell

sun*_*tty 5 python bash python-2.4

我已经尝试了如何强制/ bin/bash解释器为oneliners所说的内容

通过做

os.system('GREPDB="my command"')
os.system('/bin/bash -c \'$GREPDB\'')
Run Code Online (Sandbox Code Playgroud)

但是没有运气,不幸的是我需要用bash运行这个命令而subp在这个环境中不是一个选项,我只限于python 2.4.有什么建议让我朝着正确的方向前进吗?

mgo*_*ser 8

下面的解决方案最初仍然调用 shell,但它会切换到 bash 来执行您尝试执行的命令:

os.system('/bin/bash -c "echo hello world"')
Run Code Online (Sandbox Code Playgroud)


fal*_*tru 7

两个命令都在不同的子shell中执行.

在第一次system调用中设置变量不会影响第二次system调用.

您需要将两个命令放在一个字符串中(将它们组合在一起;).

>>> import os
>>> os.system('GREPDB="echo 123"; /bin/bash -c "$GREPDB"')
123
0
Run Code Online (Sandbox Code Playgroud)

注意您需要使用"$GREPDB"而不是'$GREPDBS'.否则,它按字面解释而不是扩展.

如果你可以使用subprocess:

>>> import subprocess
>>> subprocess.call('/bin/bash -c "$GREPDB"', shell=True,
...                 env={'GREPDB': 'echo 123'})
123
0
Run Code Online (Sandbox Code Playgroud)