在 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 时权限被拒绝(公钥)