python混合shell_bash – shell脚本中的混合代码.共享变量

This answer讨论了如何从终端中的命令行运行多行Python片段.我注意到答案在shell脚本中很有用,即使是嵌套缩进,这非常好,例如

#!/bin/bash

some_text="Hello world"

echo $some_text

cat <

import sys;

for r in range(3):

print r

for a in range(2):

print "hello"

EOF

打印:

0

hello

hello

1

hello

hello

2

hello

hello

但是,我很难在shell脚本和Python片段之间共享变量.

>如何在bash脚本中收集python下标的输出? (例如在$output等变量中).

>如何将bash变量(例如$some_text)传递给Python脚本?

解决方法:

获取Python的变量

由于(当没有引用EOF标记时)变量替换发生在将文本从heredoc传递到python的标准输入之前,您可以在脚本中正确抛出变量.

python - <

some_text = "$some_text"

EOF

如果some_text被测试,python会看到some_text =“test”.但请注意,它可以被视为代码注入漏洞.如果some_text是“; import os; os.system(”evil-command“); x =”,例如,python会看到:

some_text = ""; import os; os.system("evil-command"); x = ""

并运行那个邪恶的命令.

如果您希望能够将Python代码直接引入脚本而不进行任何修改,则可以导出变量.

export some_text

并使用os.environ来检索它.

some_text = os.environ['some_text']

这是一种更安全/更安全的方法.

从Python获取输出

您可以使用命令替换来收集脚本的输出.

output=$(

python - <

import sys;

for r in range(3):

print r

for a in range(2):

print "hello"

EOF

)

(请注意,所有尾随的换行符都已删除)

标签:python,bash,zsh,scripting

来源: https://codeday.me/bug/20190809/1630224.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值