This answer讨论了如何从终端中的命令行运行多行Python片段.我注意到答案在shell脚本中很有用,即使是嵌套缩进,这非常好,例如
#!/bin/bash
some_text="Hello world"
echo $some_text
cat <<EOF | python -
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 - <<EOF
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']
这是一种更安全/更安全的方法.
您可以使用命令替换来收集脚本的输出.
output=$(
python - <<EOF
import sys;
for r in range(3):
print r
for a in range(2):
print "hello"
EOF
)
(请注意,所有尾随的换行符都已删除)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。