如何使os.system读取所有语句

时间:2018-08-02 09:33:42

标签: python os.system

import wikipedia
import os
while True:
    input = raw_input("Ques: ")
    #To get output in a particular language ,
    #This prints the results on spanish
    #wikipedia.set_lang("es")
    wiki = wikipedia.summary(input, sentences = 2).encode('utf-8').strip()
    os.system("say " + wiki)
    print wiki

在输出控制台上,它要求

Ques:,当我输入Cristiano

它说"Cristiano is a Portuguese footballer"

但是当我键入Cristiano(说Chelsea FC)以外的任何内容时,它会显示

sh: -c: line 0: unexpected EOF while looking for matching `''

sh: -c: line 1: syntax error: unexpected end of file

OR

sh: -c: line 0: syntax error near unexpected token `('

2 个答案:

答案 0 :(得分:1)

返回的wikipedia.summary()值可能包含shell解释具有特殊含义的字符。您可以使用shlex.quote()来转义此类字符:

import wikipedia
import os
import shlex
while True:
    input = raw_input("Ques: ")
    #To get output in a particular language ,
    #This prints the results on spanish
    #wikipedia.set_lang("es")
    wiki = wikipedia.summary(input, sentences = 2).encode('utf-8').strip()
    os.system("say " + shlex.quote(wiki))
    print wiki

答案 1 :(得分:0)

我以前从未与wikipedia第三方合作。但是,当我尝试您的代码时,发现只需要删除.encode('utf-8') 。对我来说这是工作。

wiki = wikipedia.summary(i, sentences=2).strip()

 import wikipedia
 import os
 while True:
    i = input("Ques: ")
    #To get output in a particular language ,
    #This prints the results on spanish
    #wikipedia.set_lang("es")
    wiki = wikipedia.summary(i, sentences=2).strip()
    os.system("say "+ wiki)
    print(wiki)    

结果:Chelsea Football Club is a professional football club in London, England, that competes in the Premier League. Founded in 1905, the club's home ground since then has been Stamford Bridge.Chelsea won the First Division title in 1955, ...

或者,您可以使用另一个第三方,例如 pyttsx3 pip install pyttsx3

代码将如下所示:

   import wikipedia
   import pyttsx3

   engine = pyttsx3.init()

   while True:
    i = input("Ques: ")
    wiki = wikipedia.summary(i, sentences=2).strip()
    # os.system("say "+ wiki)
    print(wiki)

    engine.say(wiki)
    engine.runAndWait()`

我希望它能提供帮助。