将变量从Python传递到Shell脚本
大家好,我是新手,正在用Python和wxPython做一个小项目,主要是自动化的。现在我遇到一个问题,就是想把变量从Python传到Shell脚本里。
我需要连接FTP,然后下载一个用BASH写的文件(第一个脚本)。这个BASH脚本会调用另一个BASH脚本(第二个脚本),而这个脚本也在FTP服务器上。但是,第一个脚本里并没有直接写出第二个脚本的名字,所以我需要从我的Python脚本里把“脚本名字”传过去,但现在我做不到这一点。
所以我需要你们的帮助来解决这个问题,我在谷歌上查了很多,但没找到合适的答案。
谢谢你们的帮助。
我尝试直接运行这个,但还是没有接收到第二个参数,所以我又看了一遍脚本,发现:
在第一个脚本里,$2、$3和$7这些参数已经配置好了(它们是在myproject.sh里内置的)。
请帮我解决这个问题……
2 个回答
1
最快最简单的方法就是让你的Python脚本创建一个文件,这个文件用bash的语法来设置一个变量名,然后让你的第一个bash脚本去读取这个文件。读取这个文件的过程其实就是在设置那个变量。
所以在Python中,你需要把这个文件输出到某个地方:
name_of_script="/path/to/second/script.sh"
with open("/my/path/scriptnamevar.sh", "w") as f:
#Output to bash-recognized variable setting syntax
f.write("SCRIPT_NAME={}".format(name_of_script))
然后在你的第一个脚本中,你只需要读取scriptnamevar.sh(或者你决定给它起的任何名字)。
source /my/path/scriptnamevar.sh
# This should output whatever name_of_script was in python
echo $SCRIPT_NAME
0
你可以使用命令行参数。因为你正在用子进程来调用第一个bash脚本,所以你可以把它改成这样:
subprocess.call(["bashScript1Name", "bashScript2Name"])
然后在bashScript1Name中,第二个脚本的名字会存放在变量$1里。