将字符串变量或字符串数组从python传递到curl脚本

2024-04-29 18:41:29 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个来自Vonage网站的curl脚本,它向我的个人WhatsApp发送一条消息,其中包含在"text":之后的“”中的任何内容

curl -X POST https://messages-sandbox.nexmo.com/v0.1/messages \
-u '5bbb*************2mI' \
-H 'Content-Type: application/json' \
-H 'Accept: application/json' \
-d '{
"from": { "type": "whatsapp", "number": "1415*********" },
"to": { "type": "whatsapp", "number": "38*********" },
"message": {
  "content": {
    "type": "text",
    "text": "This message has been sent from Vonage API"
      }
     }
   }'

我这样从curltest.py调用脚本

import os 
os.system("bash /home/pi/Desktop/curltest.sh") 

它由crontable作为cronjob每30分钟执行一次。这非常有效,但是我想做的是发送字符串变量或字符串数组的值,而不是在"text":字段中键入确切的消息,并且该字符串数组将在同一个python文件中声明和填充(如果可能)

这是一篇本科论文,所以只要它有效,它可以是必要的粗糙

我已经尝试声明一个简单的变量,删除“”并将该变量放在那里,但它给了我一个语法错误,这与我尝试关闭'from-d ',将该变量放在那里,然后在语句的其余部分重新打开'时的语法错误相同。 我们根本没有使用卷曲,所以我有点不懂


Tags: 字符串textfrom脚本json消息numbermessage
2条回答

首先,请将curltest.sh修改为:

message="$1"
curl -X POST https://messages-sandbox.nexmo.com/v0.1/messages \
-u '5bbb*************2mI' \
-H 'Content-Type: application/json' \
-H 'Accept: application/json' \
-d '{
"from": { "type": "whatsapp", "number": "<Vonage-s number>" },
"to": { "type": "whatsapp", "number": "<my number>" },
"message": {
  "content": {
    "type": "text",
    "text": "'"$message"'"
    }
  }
}'

然后使用以下命令从curltest.py调用脚本:

import subprocess
subprocess.call(["bash", "/home/pi/Desktop/curltest.sh", "put your message here"])

一种简单的方法是将消息设置为python程序内的bash环境变量,然后在bash脚本中引用该环境。例如,如果python代码使用bash数组语法设置环境变量CURLY_TEXT

import os 
props=['Hello, world!', '555-1212', '121-5555']
props_str=" ".join(f'"{p}"' for p in props)
os.environ["CURLY_TEXT"] = f"({props_str})"
os.system("bash /home/pi/Desktop/curltest.sh")

…然后bash脚本可以引用如下数组元素:

eval declare -a props="${CURLY_TEXT}"

curl -X POST https://messages-sandbox.nexmo.com/v0.1/messages \
-u '5bbb*************2mI' \
-H 'Content-Type: application/json' \
-H 'Accept: application/json' \
-d '{
"from": { "type": "whatsapp", "number": '\"${props[1]}\"' },
"to": { "type": "whatsapp", "number":  '\"${props[2]}\"' },
"message": {
  "content": {
    "type": "text",
    "text": '\"${props[0]}\"'
      }
     }
   }'

NB:您必须对单引号做一些棘手的事情,因为-d 之后的内容被单引号包围:例如,要替换bash数组变量,您需要结束单引号块,添加变量${props[0]},然后恢复单引号块

相关问题 更多 >