我有一个bash脚本,它设置环境变量并运行命令
LD_LIBRARY_PATH=my_path
sqsub -np $1 /homedir/anotherdir/executable
现在我想使用python而不是bash,因为我想计算传递给命令的一些参数
我试过了
putenv("LD_LIBRARY_PATH", "my_path")
及
call("export LD_LIBRARY_PATH=my_path")
接
call("sqsub -np " + var1 + "/homedir/anotherdir/executable")
但程序总是放弃,因为没有设置LD_LIBRARY_路径
我怎样才能解决这个问题
谢谢你的帮助
(如果我在调用python脚本之前导出LD_LIBRARY_PATH,一切都会正常工作,但我希望python确定路径并将环境变量设置为正确的值)
狂欢节:
类似的,在Python中:
这里有很多很好的答案,但是您应该不惜一切代价避免使用
shell=True
作为将不受信任的变量传递给子流程这是一种安全风险。变量可以转义到shell并运行任意命令!如果您无法避免,至少使用python3的shlex.quote()
来转义字符串(如果您有多个空格分隔的参数,请引用每个拆分,而不是整个字符串)shell=False
始终是传递参数数组的默认值现在,安全解决方案
方法#1
更改您自己的流程环境-新环境将应用于python本身和所有子流程。
方法#2
复制环境并将其传递给孩子。您可以完全控制子环境,并且不会影响python自己的环境
方法#3
仅限Unix:执行
env
以设置环境变量。如果有很多变量需要修改,而不是portabe,那么就更麻烦了,但是像#2一样,您可以完全控制python和子环境当然,如果
var1
包含多个空格分隔的参数,它们现在将作为带空格的单个参数传递。要保留shell=True
的原始行为,必须组成包含拆分字符串的命令数组:可以通过使用将元素添加到环境中
并在shell(使用
os.environ
)中使用相关问题 更多 >
编程相关推荐