我已经尝试了How to force /bin/bash interpreter for oneliners
中的内容通过
os.system('GREPDB="my command"')
os.system('/bin/bash -c \'$GREPDB\'')
然而没有运气,不幸的是我需要用bash运行这个命令而subp在这个环境中不是一个选项,我只限于python 2.4。有什么建议让我朝着正确的方向前进吗?
答案 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