如何在谷歌合作实验室中将 Python 变量发送到终端的 curl 命令(引号和 '$' 不适用于 curl)



这是后堆栈溢出的后续操作

如何在Google Colab终端命令中使用Python变量?

它询问如何将python变量发送到命令行。

答案是你需要在它前面放一个$。在其他情况下,你需要引用所有类似"$variable"的内容

除curl命令外,这对我有效。例如

emailBody1 = ' this is some test text'
!curl -X POST 'http://localhost.yxy' -H "Content-Type: application/json" -d '{"emails": [{"emailBody": '$emailBody1'}}'

我尝试了无引号、单引号和双引号。没有引号会导致错误,单引号/双引号只是将里面的内容作为字符串发送;没有引用变量。

这适用于我的

-d  '{{"emails": [{{"emailBody": "$emailBody1" }}]}}'

-d  '{{"emails": [{{"emailBody": "{emailBody1}" }}]}}'

所有字符串都在' '(或" "(内,不拆分为'string' $var 'string'

正常的{ }必须转换为{{ }},因为它使用{ }来放入变量中的值。


我用http://httpbin.org/post它会发回所有数据,这样我就可以看到发送了什么。

emailBody1 = ' this is some test text'
!curl -X POST 'http://httpbin.org/post' -H "Content-Type: application/json" -d  '{{"emails": [{{"emailBody": "{emailBody1}" }}]}}'

如果您真的坚持使用curl,请使用subprocess显式运行副本,这样您就不会依赖Jupyter来实现魔术。

import subprocess, json
emailBody1 = ' this is some test text'
subprocess.run([
'curl',
'-X', 'POST',
'-H', 'Content-Type: application/json',
'-d', json.dumps({"emails": [{"emailBody": emailBody1}]}),
'http://localhost.yxy',
])

这还具有使用Python的json.dumps()生成JSON文本的优势,在其他方法(f/e,如果您的电子邮件文本包含换行符、文本双引号或其他特殊字符(的许多情况下,JSON文本不会崩溃。

最新更新