在 Raspberry Pi 上从 python 脚本为 Twilio 服务运行终端命令时出错

Posted

技术标签:

【中文标题】在 Raspberry Pi 上从 python 脚本为 Twilio 服务运行终端命令时出错【英文标题】:Error running terminal command from python script for Twilio services on Raspberry Pi 【发布时间】:2022-01-14 01:56:04 【问题描述】:

我希望使用 Python 中的 Twilio CLI 运行以下命令:

ngrok_cmd = "twilio phone-numbers:update "+ my_number " --sms url=https://localhost:5000"
os.system(ngrok_cmd)

该命令在终端上有效,但如果我尝试通过 python 执行该命令则无效。它不断给出以下错误:

sh: 1: twilio: not found

编辑

我试过了:

ngrok_cmd = "/home/pi/.config/nvm/versions/node/v16.13.1/bin/twilio phone-numbers:update "+ my_number " --sms url=http://localhost:5000"
os.system(ngrok_cmd)

现在我收到此错误:

 » Could not find profile.
 » To create the profile, run:

  twilio profiles:create

Alternatively, twilio-cli can use credentials stored in environment variables:

# OPTION 1 (recommended)
export TWILIO_ACCOUNT_SID=your Account SID from twil.io/console
export TWILIO_API_KEY=an API Key created at twil.io/get-api-key
export TWILIO_API_SECRET=the secret for the API Key

# OPTION 2
export TWILIO_ACCOUNT_SID=your Account SID from twil.io/console
export TWILIO_AUTH_TOKEN=your Auth Token from twil.io/console

Once these environment variables are set, a twilio-cli profile is not required and you may skip the "login" step.

但是,我已经在 /etc/profile 中设置了环境变量并通过以下方式进行了验证:

printenv | grep TWI

我不知道这个错误的原因是什么。谁能帮我解决这个问题?

【问题讨论】:

你从终端运行这个?你通过虚拟环境运行这个?如果是这样,你安装了这个包? @Bernana 不是虚拟环境,在树莓派操作系统上运行。我遵循了这个:twilio.com/docs/twilio-cli/quickstart 并将我的密钥和令牌添加到树莓派作为环境变量。它可以在终端上运行,但不能通过 python... 我刚刚在我的笔记本电脑上试过这个。我安装了twilio CLI 并运行os.system("twilio") 并收到了帮助文本响应。您的 python 程序是否在您安装 Twilio CLI 的同一环境中运行? @philnash 感谢您的帮助!我在下面尝试了 Mark Setchell 的解决方案,但遇到了一个新错误……知道为什么会发生这种情况吗? 我看到你已经整理好了,感谢马克的帮助! 【参考方案1】:

错误信息意味着您的 shell 找不到 twilio 命令。这是因为它与您在终端中运行时的位置不同,因为 PATH(shell 查找命令的位置)设置不同。

您需要进入twilio 工作并运行的普通终端:

which twilio         # or alternatively 
type twilio

这会告诉你twilio 命令在哪里,即它的完整路径。

在您的 Python 代码中使用相同的完整路径,以便它可以找到它。

【讨论】:

嗨,我试过这样做:os.system('/home/pi/.config/nvm/versions/node/v16.13.1/bin/twilio phone-numbers:update ' +my_number+ ' --sms-url=https://localhost:5000') 但现在它告诉我它找不到我的环境变量。我已经确认 printenv | grep TWI 存在环境变量。我该如何解决这个问题? 当您运行printenv | grep TWI 时,您是在运行您的登录配置文件的终端中执行此操作的。当 Python 运行您的脚本时,它不会登录,也不会设置那些环境变量。您可以通过从 Python 运行 os.system("printenv") 来证明这一点 - 这是一个不同的环境。在使用 Twilio 之前,您需要获取在 os.system() 中设置环境变量的脚本。 我明白了...如果您不介意,您能教我如何将设置环境变量的脚本“获取”到 Python 吗?我的环境变量目前存储在/etc/profile 感谢您的帮助!我用这个:***.com/questions/40216311/… 来“获取设置环境变量的脚本”,现在它可以工作了!

以上是关于在 Raspberry Pi 上从 python 脚本为 Twilio 服务运行终端命令时出错的主要内容,如果未能解决你的问题,请参考以下文章

在我的 Raspberry Pi 上从 Gitlab.com 克隆 Repo 时权限被拒绝(公钥)

在Raspberry Pi上使用python3进行Bash

在raspberry pi中安装缺少的python包

并行计算Python / Raspberry Pi

使用python3在Raspberry Pi上打开和关闭Tkinter GUI

慢响应Firebase + Python + Raspberry pi