我是从这样一个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()
你什么意思,你不能得到它的工作?你还有什么? –