我是從這樣一個python腳本中運行的shell腳本:傳遞一個變量到shell腳本
call(['bash', 'run.sh'])
而且我想通過run.sh
從python腳本里面幾個變量。它看起來像我可以只追加變量,像這樣:
call(['bash', 'run.sh', 'var1', 'var2'])
,然後用$ 1和$ 2訪問他們在我的shell腳本。但我無法得到這個工作。謝謝。
我是從這樣一個python腳本中運行的shell腳本:傳遞一個變量到shell腳本
call(['bash', 'run.sh'])
而且我想通過run.sh
從python腳本里面幾個變量。它看起來像我可以只追加變量,像這樣:
call(['bash', 'run.sh', 'var1', 'var2'])
,然後用$ 1和$ 2訪問他們在我的shell腳本。但我無法得到這個工作。謝謝。
如果call(['bash', 'run.sh'])
在沒有參數的情況下工作,沒有理由爲什麼當傳遞附加參數時它不應該工作。
您需要的變量替代值到命令行參數,而不是僅僅通過名稱的變量的如字符串,做到這一點:除了
call(['bash', 'run.sh', 'var1', 'var2'])
,這樣做:
var1 = '1'
var2 = '2'
call(['bash', 'run.sh', var1, var2])
現在這將工作,只要var1
和var2
是字符串。如果沒有,你需要將它們轉換爲字符串:
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))
使用子打電話給你的shell腳本
subprocess.Popen([ 'run.sh%s%S' %(VAR1,VAR2),殼=真)。
如果'var1'包含空格或其他幾個shell元字符之一,這將無法正常工作。將單字符參數用於「Popen」代替列表幾乎不存在很好的理由。 – chepner
您可以使用兩個內置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
打印。
import os
def run():
os.system('C:\\scrips\\mybash.bat')
run()
你什麼意思,你不能得到它的工作?你還有什麼? –