我有一个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_PATH而放弃。
我该怎么解决?
谢谢你的帮助!
(如果在调用python脚本之前导出LD_LIBRARY_PATH,一切正常,但我希望python确定路径并将环境变量设置为正确的值)
这里有很多好的答案,但是您应该不惜一切代价避免使用
shell=True
将不受信任的变量传递给子流程,因为这是一个安全风险。变量可以转义到shell并运行任意命令!如果无法避免,请至少使用python3的shlex.quote()
来转义字符串(如果有多个空格分隔的参数,请引用每个拆分而不是完整的字符串)。shell=False
始终是传递参数数组的默认值。现在,安全的解决方案。。。
方法1
更改您自己流程的环境-新环境将应用于python本身和所有子流程。
方法2
抄一份环境,传给孩子们。您可以完全控制子环境,不会影响python自己的环境。
方法3
仅限Unix:执行
env
以设置环境变量。如果您有许多要修改的变量而不是portabe,但是像#2一样,您可以保留对python和子环境的完全控制,这会更加麻烦。当然,如果
var1
包含多个空格分隔的参数,它们现在将作为带空格的单个参数传递。若要使用shell=True
保留原始行为,必须组成包含拆分字符串的命令数组:您可以使用
并通过使用
猛击:
类似的,在Python中:
相关问题 更多 >
编程相关推荐