在curl语句中运行bash命令

时间:2017-08-08 03:09:59

标签: python bash curl slack

我正在尝试执行bash命令作为我的curl语句的一部分。 bash命令假设执行显示某些消息的python文件。我怎样才能实现这一目标?这是我的尝试,但不起作用并显示命令的字符串而不是实际执行bash命令:

curl -X POST --data-urlencode 'payload={"channel": "#pxc-wsrep-test", "username": "webhookbot", "text": python test2.py, "icon_emoji": ":ghost:"}' https://hooks.slack.com/services/F065ZJS3N/B4JT9K2TM/5KWZRYFIGhLL0MimiHAW6Gbz

下面是我要执行的python脚本test2.py:

from subprocess import Popen, PIPE, STDOUT

cmd = 'mysql -uroot -psecret -e"show status like \'wsrep_local_state_comment\'\G"'
p = Popen(cmd, shell=True, stdin=PIPE, stdout=PIPE, stderr=STDOUT, close_fds=True)

output = p.stdout.read()
print output

所以我尝试在python脚本中运行curl,如下所示: 从子进程导入Popen,PIPE,STDOUT 导入请求

paylod={"text": 'mysql -uroot -psecret -e"show status like \'wsrep_local_state_comment\'\G"'}
r = request.post('https://hooks.slack.com/services/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', data=payload)
print(r.test)
{
    "form": {
        "test": 'mysql -uroot -psecret -e"show status like \'wsrep_local_state_comment\'\G"'
     },
}

但即使安装了pip和request,我也会收到以下错误。

Traceback (most recent call last):
  File "test.py", line 5, in <module>
    r = request.post('https://hooks.slack.com/services/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', data=payload)
NameError: name 'request' is not defined

2 个答案:

答案 0 :(得分:0)

我认为我们不需要在这里过多地复杂化。如果我们可以访问示例中的python脚本,我们可以使用requestspycurl来完成python中的工作。

它可以像使用带有数据字典的post方法一样简单here

根据我们上次评论对话编辑回复

import requests # make sure we have requests installed or else use urllib
payload={"text": 'mysql -uroot -psecret -e"show status like \'wsrep_local_state_comment\'\G"'}
r = requests.post('https://hooks.slack.com/services/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', data=payload)
print(r.status_code)
print(r.content)

答案 1 :(得分:-1)

您可以使用反引号或$命令运行另一个命令

例如

echo hi`echo bye`

OR

echo hi$(echo bye)