2015-08-19 163 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() 
相关问题