不能 运行 '>' 用于 python 中的终端命令

Cannot run '>' for a terminal command in python

谢谢你帮我。

我正在尝试 运行 antiword from python 将 .docx 转换为 .doc。我已经为任务使用了子流程。

import subprocess
test = subprocess.Popen(["antiword","/home/mypath/document.doc",">","/home/mypath/document.docx"], stdout=subprocess.PIPE)
output = test.communicate()[0]

但是return错误,

I can't open '>' for reading
I can't open '/home/mypath/document.docx' for reading

但同样的命令在终端中有效

antiword /home/mypath/document.doc > /home/mypath/document.docx

我做错了什么?

> 字符被 shell 解释为输出流重定向。但是,subprocess 不使用 shell,因此没有什么可以将 > 字符解释为重定向。因此 > 字符将传递给命令。毕竟,这是一个完全合法的文件名:subprocess 怎么知道你实际上没有名为 > 的文件?

不清楚您为什么要尝试将 antiword 的输出重定向到文件并读取变量 output 中的输出。如果它被重定向到一个文件,那么 output.

中将没有任何内容可读。

如果要将 subprocess 调用的输出重定向到文件,请打开文件以写入 Python 并将打开的文件传递给 subprocess.Popen:

with open("/home/mypath/document.docx", "wb") as outfile:
    test = subprocess.Popen(["antiword","/home/mypath/document.doc"], stdout=outfile, stderr=subprocess.PIPE)
    error = test.communicate()[1]

进程可能会写入其标准错误流,因此我已经在变量 error.

中捕获了写入该流的所有内容