2015-08-19 160 views
0

我是從這樣一個python腳本中運行的shell腳本:傳遞一個變量到shell腳本

call(['bash', 'run.sh']) 

而且我想通過run.sh從python腳本里面幾個變量。它看起來像我可以只追加變量,像這樣:

call(['bash', 'run.sh', 'var1', 'var2']) 

,然後用$ 1和$ 2訪問他們在我的shell腳本。但我無法得到這個工作。謝謝。

+1

你什麼意思,你不能得到它的工作?你還有什麼? –

回答

1

如果call(['bash', 'run.sh'])在沒有參數的情況下工作,沒有理由爲什麼當傳遞附加參數時它不應該工作。

您需要的變量替代值到命令行參數,而不是僅僅通過名稱的變量的如字符串,做到這一點:除了

call(['bash', 'run.sh', 'var1', 'var2']) 

,這樣做:

var1 = '1' 
var2 = '2' 
call(['bash', 'run.sh', var1, var2]) 

現在這將工作,只要var1var2是字符串。如果沒有,你需要將它們轉換爲字符串:

var1 = 1 
var2 = 2 
call(['bash', 'run.sh', str(var1), str(var2)]) 

或者你可以使用shlex.split()

cmd = 'bash run.sh {} {}'.format(var1, var2) 
call(shlex.split(cmd)) 
1

使用子打電話給你的shell腳本

subprocess.Popen([ 'run.sh%s%S' %(VAR1,VAR2),殼=真)。

+1

如果'var1'包含空格或其他幾個shell元字符之一,這將無法正常工作。將單字符參數用於「Popen」代替列表幾乎不存在很好的理由。 – chepner

1

您可以使用兩個內置python模塊。一個是os,另一個是subprocess。即使它看起來像你使用subprocess,我會顯示兩者。

下面是我用於此的示例bash腳本。

test.sh

echo $1 
echo $2 

使用子

>>> import subprocess 
>>> subprocess.call(['bash','test.sh','foo','bar']) 
foo 
bar 

這應該是工作,你能告訴我們,您目前得到的錯誤或輸出。


使用操作系統

>>> import os 
>>> os.system('bash test.sh foo bar') 
foo 
bar 
0 

注意退出狀態是每次通話後os打印。

0
import os 
def run(): 
    os.system('C:\\scrips\\mybash.bat') 
run() 
相關問題