我已經試過什麼在How to force /bin/bash interpreter for oneliners如何強制使用os.system(),而不是使用外殼
告知這樣做
os.system('GREPDB="my command"')
os.system('/bin/bash -c \'$GREPDB\'')
但是沒有運氣,不幸的是我需要運行這個命令bash和subp不是這個環境中的一個選項,我僅限於python 2.4。任何建議讓我走向正確的方向?
我已經試過什麼在How to force /bin/bash interpreter for oneliners如何強制使用os.system(),而不是使用外殼
告知這樣做
os.system('GREPDB="my command"')
os.system('/bin/bash -c \'$GREPDB\'')
但是沒有運氣,不幸的是我需要運行這個命令bash和subp不是這個環境中的一個選項,我僅限於python 2.4。任何建議讓我走向正確的方向?
兩個命令是在不同的子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
不幸的是,這仍然給我外殼錯誤:-( – sunshinekitty
@ 0n35,你可以發佈回溯? – falsetru
是否有可能對你來說,改變誰啓動應用程序的用戶的默認shell? 你可以嘗試使用chsh
來做到這一點。
如果你在bash shell並運行一個調用'os.system(command)'的python腳本,默認情況下它會運行在Bourne shell('sh')中。您需要使用'/ bin/bash -c'作爲前綴,例如:'os.system(「/ bin/bash -c \」echo'hello world'\「」)' – mgoldwasser
下面的解決方案仍然最初調用一個外殼,但它切換到抨擊你正試圖執行命令:
os.system('/bin/bash -c "echo hello world"')
我用這個:
subprocess.call(["bash","-c",cmd])
//好的,忽略此,因爲我沒有注意到subpr沒有考慮過。
請解釋一下它是如何工作的?爲什麼它是一個解決方法嗎? – Stibu
@Stibu實際上它是一種變通方法來解決我的問題msysgit環境的窗口。 –
我搜索這個命令了一些日子,發現真正的工作代碼:
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
爲什麼['subprocess'模塊(http://docs.python.org /2.4/lib/module-subprocess.html)不是一個選項嗎?它在Python 2.4中受支持。 – falsetru
敢肯定這是2.4.6,但是這是2.4.3 – sunshinekitty
什麼不同的一個['EXEC *'](http://docs.python.org/2/library/os.html#os。 execl)函數? – user2357112