如何在os.popen()中进行管道传输?-python
我已经找了好几天了,但我找不到一个很好的解释来解释如何做到这一点。我尝试在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命令传输到另一个命令 帮助?使
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,请参阅下面的我的答案,以获得更通俗的方法。