如何进行管道输送欧斯波本() ? python

2024-04-18 05:47:51 发布

您现在位置:Python中文网/ 问答频道 /正文

我找了好几天,找不到一个很好的解释来解释怎么做。我尝试在python中执行以下操作:

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

time = os.popen("date +%T").read()

然后像这样做:

os.system("echo time is " + time + " | festival --tts ")

当我这样做的时候,它抛出了一个关于“|”的错误。我看腻了子流程调用,但是我不知道如何使用它将echo命令传输到另一个命令。你知道吗

救命啊?你知道吗


Tags: 命令echoreaddatetimeisos系统
1条回答
网友
1楼 · 发布于 2024-04-18 05:47:51

使用subprocess模块。你知道吗

主要问题是管道字符是shell特性,^{}不使用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,以避免隐藏时间模块)

相关问题 更多 >