如何在os.popen()中进行管道传输?-python

如何在os.popen()中进行管道传输?-python,python,operating-system,pipe,popen,Python,Operating System,Pipe,Popen,我已经找了好几天了,但我找不到一个很好的解释来解释如何做到这一点。我尝试在python中执行以下操作: 从系统获取时间并将其发送到变量,如: time = os.popen("date +%T").read() 然后做一些类似的事情: os.system("echo time is " + time + " | festival --tts ") 当我这样做时,它抛出了一个关于|的错误。我已经厌倦了subprocess.call,但是我不知道如何使用它将echo命令传输到另一个命令 帮助?使

我已经找了好几天了,但我找不到一个很好的解释来解释如何做到这一点。我尝试在python中执行以下操作:

从系统获取时间并将其发送到变量,如:

time = os.popen("date +%T").read()
然后做一些类似的事情:

os.system("echo time is " + time + " | festival --tts ")
当我这样做时,它抛出了一个关于|的错误。我已经厌倦了subprocess.call,但是我不知道如何使用它将echo命令传输到另一个命令

帮助?

使用该模块

主要问题是管道角色是一个shell功能,不使用shell,而是执行原始命令

例如,您可以使用:

import subprocess
output = subprocess.check_output("echo time is " + time + " | festival --tts ", shell=True)
在这种情况下,您需要使用shell=True作为关键字参数,这样它就不会抱怨管道

注意:通常,您应该注意,来自不受信任来源的任何内容都不会作为system/shell命令执行。在您的特定情况下,这似乎不是真正的问题,因为您只是从日期输出组装命令,但一般来说,这可能会导致重大的安全问题

还请注意,没有理由执行日期+%T,请改用此选项:

import time
mytime = time.strftime("%H:%m:%S")
请注意,在本例中,变量名为mytime,为了避免时间模块的阴影,请使用该模块

主要问题是管道角色是一个shell功能,不使用shell,而是执行原始命令

例如,您可以使用:

import subprocess
output = subprocess.check_output("echo time is " + time + " | festival --tts ", shell=True)
在这种情况下,您需要使用shell=True作为关键字参数,这样它就不会抱怨管道

注意:通常,您应该注意,来自不受信任来源的任何内容都不会作为system/shell命令执行。在您的特定情况下,这似乎不是真正的问题,因为您只是从日期输出组装命令,但一般来说,这可能会导致重大的安全问题

还请注意,没有理由执行日期+%T,请改用此选项:

import time
mytime = time.strftime("%H:%m:%S")

请注意,在本例中,变量名为mytime,为了避免时间模块的阴影

请注意,您不必使用date+%t,请参阅下面的我的答案,以获得更为通俗的方法。请注意,您不必使用date+%t,请参阅下面的我的答案,以获得更通俗的方法。