在subprocess.call中使用大于运算符

时间:2014-01-15 11:04:10

标签: python subprocess call

我想做的很简单。我想使用python的subprocess模块调用以下命令。

cat /path/to/file_A > file_B

该命令只是工作,并将file_A的内容复制到当前工作目录中的file_B。但是,当我尝试在脚本中使用subprocess模块调用此命令时,它会出错。以下是我正在做的事情:

import subprocess

subprocess.call(["cat", "/path/to/file_A", ">", "file_B"])

我收到以下错误:

cat: /path/to/file_A: No such file or directory
cat: >: No such file or directory
cat: file_B: No such file or directory
我做错了什么?如何在子进程模块call命令中使用大于运算符?

2 个答案:

答案 0 :(得分:10)

>输出重定向是 shell 功能,但subprocess.call()列表argsshell=False(默认值)不使用外壳

您必须在此处使用shell=True

subprocess.call("cat /path/to/file_A > file_B", shell=True)

或者更好的是,使用subprocess将命令的输出重定向到文件:

with open('file_B', 'w') as outfile:
    subprocess.call(["cat", "/path/to/file_A"], stdout=outfile)

如果您只是复制文件,请使用shutil.copyfile() function Python 复制文件:

import shutil

shutil.copyfile('/path/to/file_A', 'file_B')

答案 1 :(得分:1)

除了Martijn的回答:

你可以自己做cat同样的事情:

with open("/path/to/file_A") as file_A:
    a_content = file_A.read()
with open("file_B", "w") as file_B:
    file_B.write(a_content)