我已经找了几天,但我找不到如何做到这一点的好解释。我正在尝试在python中执行以下操作:
从系统中获取时间并将其发送到如下变量:
time = os.popen("date +%T").read()
然后执行以下操作:
os.system("echo time is " + time + " | festival --tts ")
当我这样做时会引发关于“|”的错误。我已经厌倦了查看subprocess.call,但是我不知道如何使用它将echo命令传递给另一个命令。
帮助?
答案 0 :(得分:4)
使用subprocess模块。
主要问题是管道特征是一个shell特征,os.system
没有使用Shell,但执行原始命令。
例如,您可以使用:
import subprocess
output = subprocess.check_output("echo time is " + time + " | festival --tts ", shell=True)
在这种情况下,您需要使用shell=True
作为关键字参数,以便它不会抱怨管道。
注意:通常,您应该注意不受信任来源的任何内容都不会作为system / shell命令执行。在您的具体情况下,这似乎不是真正的问题,因为您只从date
输出组装命令,但一般情况下它可能会导致严重的安全问题。
另请注意,没有理由执行date +%T
,请改用:
import time
mytime = time.strftime("%H:%m:%S")
(请注意,在这种情况下,变量名为mytime,以避免影响时间模块)