python - 在python中显示错误“ sh:1:语法错误:未终止的带引号的字符串”
问题描述
#!/usr/bin/env python3
from os import system
def playSong():
message = "it's time to drink water and, take a rest for some minutes."
#filepath = "/home/leader/Downloads/anywhere.mp3"
system("espeak '" + message + "'")
playSong()
在终端中运行此程序时,它会显示此错误。我怎样才能摆脱这个?
解决方案
永远不要使用system()
- 在任何语言中,而不仅仅是 Python - 没有明确编写和审核为有效、安全的 shell 脚本的字符串,并且不能将不受控制的内容替换到其中。
当您需要传递参数时,请改用subprocess
模块:
#!/usr/bin/env python3
import subprocess
def playSong():
message = "it's time to drink water and, take a rest for some minutes."
#filepath = "/home/leader/Downloads/anywhere.mp3"
p = subprocess.Popen(['espeak', message])
p.wait()
playSong()
否则,当有人试图播放该消息Do not ever run $(rm -rf ~)
(或其更蓄意的恶意变体$(rm -rf ~)'$(rm -rf ~)'
)时,您将度过非常糟糕的一天。
推荐阅读
- akka - 为什么 Akka 远程流量通过 UDP?
- angular - Angular - 大型查询的 Http 请求返回 null
- reactjs - 如何正确访问 React 组件中的 Redux 存储?
- graphql - 为什么 GraphQL 被称为“API”而不是任何数据的查询语言?
- azure-data-factory - Azure 数据流筛选不同的行
- microsoft-graph-api - 具有依赖项的 Microsoft Graph API 批处理请求?
- postgresql - 如何修复:错误将映射结果集转换为返回类型
- java - 找不到符号`asIterator()`
- excel - 我可以命名一组工作簿以供以后在模块中使用吗?
- python - 从文件中查找路径的最有效方法是什么?