将变量从python传递到shell脚本
我在python脚本中运行shell脚本,如下所示:将变量从python传递到shell脚本,python,bash,shell,Python,Bash,Shell,我在python脚本中运行shell脚本,如下所示: call(['bash', 'run.sh']) 我想从python脚本内部传递run.sh几个变量。看起来我可以添加变量,类似这样: call(['bash', 'run.sh', 'var1', 'var2']) 然后在我的shell脚本中使用$1和$2访问它们。但是我无法让它工作。使用子进程调用shell脚本 subprocess.Popen(['run.sh%s%s'(var1,var2)],shell=True)。有两个内置py
call(['bash', 'run.sh'])
我想从python脚本内部传递run.sh
几个变量。看起来我可以添加变量,类似这样:
call(['bash', 'run.sh', 'var1', 'var2'])
然后在我的shell脚本中使用$1和$2访问它们。但是我无法让它工作。使用子进程调用shell脚本
subprocess.Popen(['run.sh%s%s'(var1,var2)],shell=True)。有两个内置python模块可用于此。一个是
os
,另一个是子流程
。尽管看起来您正在使用子流程
,但我将同时显示这两个过程
下面是我用于此目的的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
这应该是工作,你能告诉我们错误或输出,你目前得到的
使用操作系统
>>> import subprocess
>>> subprocess.call(['bash','test.sh','foo','bar'])
foo
bar
>>> import os
>>> os.system('bash test.sh foo bar')
foo
bar
0
请注意os
在每次调用后打印的退出状态。如果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()
:
你不能让它工作是什么意思?您还得到了什么?如果
var1
包含空格或其他几个shell元字符中的一个,则此文件的可能副本将无法按预期工作。很少有好的理由使用单字符串参数来代替列表。