показывает ошибку "sh: 1: синтаксическая ошибка: неопределенная строка в кавычках" в python - PullRequest
0 голосов
/ 21 февраля 2020
#!/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()

при запуске этой программы в терминале она показывает эту ошибку. Как я могу избавиться от этого?

Ответы [ 2 ]

0 голосов
/ 21 февраля 2020

Никогда не используйте system() - ни на каком языке, не только Python - без строки, которая была явно написана и проверена на правильность, безопасный сценарий оболочки и в котором не может быть подставлено неконтролируемое содержимое .

Когда вам нужно передать аргументы, используйте вместо этого модуль 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 ~)').

0 голосов
/ 21 февраля 2020

попробуйте это, избегайте одинарных кавычек с \

message = "it\\'s time to drink water and, take a rest for some minutes."

system('espeak "%s"' %message)
...