不能 运行 '>' 用于 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
.
中捕获了写入该流的所有内容
谢谢你帮我。
我正在尝试 运行 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
.