如何在Python的subprocess.call中为Bash脚本传入变量
解决方案
首先得提醒你,在Python 2.7里别用input()获取用户输入——它会把输入内容当作Python代码执行,存在安全风险,换成raw_input()才是获取字符串输入的正确方式。
接下来要把Python变量作为参数传递给test.sh,只需要在subprocess.call()的参数列表里,按命令行的顺序依次添加选项和对应的变量值就行,这样能保证带空格的输入(比如用户输入"Los Angeles"作为城市)被正确识别为单个参数。
修改后的完整代码如下:
import subprocess # 安全获取用户输入 name = raw_input("What is your name? ") age = raw_input("What is your age? ") city = raw_input("What is your city? ") # 构造调用命令的参数列表,对应终端执行:./test.sh -a "name值" -b "age值" -c "city值" subprocess.call([ 'sh', './test.sh', '-a', name, '-b', age, '-c', city ])
补充说明
subprocess.call()的参数列表会自动帮你处理参数的引号问题,不用手动给变量加引号,避免了拼接字符串时可能出现的语法错误和安全问题。- 如果硬要使用
input()(非常不推荐),在用户输入普通字符串时也能运行,但如果有人输入恶意代码(比如"__import__('os').system('rm -rf /')"),会直接执行,风险极高,所以务必优先用raw_input()。
内容的提问来源于stack exchange,提问作者Armaan
相关产品推荐
相关产品推荐

