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

时间:2014-02-17 06:17:15

标签: python bash python-2.4

我已经尝试了How to force /bin/bash interpreter for oneliners

中的内容

通过

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

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

6 个答案:

答案 0 :(得分:6)

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

在第一次system通话中设置变量不会影响第二次system通话。

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

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

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

如果您可以使用subprocess

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

答案 1 :(得分:1)

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

os.system('/bin/bash -c "echo hello world"')

答案 2 :(得分:1)

我用这个:

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

//好的,忽略这个因为我没有注意到没有考虑子进程。

答案 3 :(得分:0)

是否可以更改启动应用程序的用户的默认shell? 您可以尝试使用chsh来执行此操作。

答案 4 :(得分:0)

我搜索了这个命令好几天了,发现了真正有效的代码:

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+'"')

输出:

abcde

答案 5 :(得分:0)

from numba import autojit, prange

@autojit
def parallel_sum(A):
    sum = 0.0
    for i in prange(A.shape[0]):
        sum += A[i]

    return sum
相关问题