How to force os.system() to use bash inste

2019-02-18 07:12发布

I've tried what's told in How to force /bin/bash interpreter for oneliners

By doing

os.system('GREPDB="my command"')
os.system('/bin/bash -c \'$GREPDB\'')

However no luck, unfortunately I need to run this command with bash and subp isn't an option in this environment, I'm limited to python 2.4. Any suggestions to get me in the right direction?

6条回答
Viruses.
2楼-- · 2019-02-18 07:56

Both commands are executed in different subshells.

Setting variables in the first system call does not affect the second system call.

You need to put two command in one string (combining them with ;).

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

NOTE You need to use "$GREPDB" instead of '$GREPDBS'. Otherwise it is interpreted literally instead of being expanded.

If you can use subprocess:

>>> import subprocess
>>> subprocess.call('/bin/bash -c "$GREPDB"', shell=True,
...                 env={'GREPDB': 'echo 123'})
123
0
查看更多
相关推荐>>
3楼-- · 2019-02-18 07:59

I use this:

subprocess.call(["bash","-c",cmd])

//OK, ignore this because I have not notice subprocess not considered.

查看更多
时光不老,我们不散
4楼-- · 2019-02-18 08:08

I searched this command for some days and found really working code:

import subprocess

def bash_command(cmd):
    subprocess.Popen(['/bin/bash', '-c', cmd])

code="abcde"
// you can use echo options such as -e
bash_command('echo -ne "'+code+'"')

Output:

abcde
查看更多
Fickle 薄情
5楼-- · 2019-02-18 08:09
subprocess.Popen(cmd, shell=True, executable='/bin/bash')
查看更多
手持菜刀,她持情操
6楼-- · 2019-02-18 08:15

The solution below still initially invokes a shell, but it switches to bash for the command you are trying to execute:

os.system('/bin/bash -c "echo hello world"')
查看更多
在下西门庆
7楼-- · 2019-02-18 08:18

Is it possible, for you, to change the default shell of the user who starts the application ? You could try to use chsh to do it.

查看更多
登录 后发表回答