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

标签 python operating-system pipe popen

我已经找了好几天了,但找不到关于如何执行此操作的良好解释。我正在尝试在 python 中执行以下操作:

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

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

然后做类似的事情:

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

当我这样做时,它会抛出一个关于“|”的错误。我厌倦了查看 subprocess.call,但是我不知道如何使用它将 echo 命令通过管道传输到另一个命令。

帮忙?

最佳答案

使用subprocess模块。

主要问题是管道字符是 shell 功能并且 os.system不使用 Shell,但执行原始命令。

例如,您可以使用:

import subprocess
output = subprocess.check_output("echo time is " + time + " | festival --tts ", shell=True)

在这种情况下,您需要使用 shell=True 作为关键字参数,这样它就不会提示管道。

注意:通常,您应该注意不要将来自不受信任来源的任何内容作为系统/shell 命令执行。在您的具体情况下,这似乎不是真正的问题,因为您仅从 date 输出组装命令,但一般来说它可能会导致重大安全问题。

另请注意,没有理由执行date +%T,请改用它:

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

(请注意,在本例中变量名为 mytime,以避免遮盖时间模块)

关于python - 如何在 os.popen() 中进行管道传输? - Python,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21077836/

相关文章:

python - 从列表中删除开头相同的相似项目

python - Django 对象版本

python - multiprocessing.Pool apply_async 中的 error_callback 在 Python 2 中?

c - 如何找到正在运行的进程的平台

bash - 如何在将标准输出保持在屏幕上的同时通过管道传输它? (而不是输出文件)

python - TensorFlow 数据集 API from_generator 序列结束错误

c - 在内存中查找进程页面(linux-kernel)

c++ - 两个线程进入无限循环

c - 子进程不读取 PIPE

c - 在 Unix 中区分管道和文件