python3子进程模块不适用于cp

时间:2020-06-16 14:17:57

标签: linux shell subprocess python-3.6 cp

以下代码,但是当我运行“ cp -rf /tmp/test.py时,我发现了为什么会发生错误” / tmp / blacktest /”,效果很好

>>> subprocess.call(['cp','-rf','/tmp/test\.py','/tmp/blacktest/'],shell=True)
 cp: missing file operand
 Try 'cp --help' for more information.
 1

1 个答案:

答案 0 :(得分:0)

简短答案: 删除shell = True(也删除“。”之前的反斜杠,为什么需要它?),如:

subprocess.call(['cp','-rf','/tmp/test.py','/tmp/blacktest/']

建议:使用python工具复制文件

import shutil
shutil.copyfile(src, dst)

好答案

shell = True会在命令前加上/ bin / sh -c

这意味着-c后面的FIRST参数是使用/ bin / sh执行的命令。您的第一个参数是cp,它然后被单独执行,不带任何参数 ...这就是为什么您看到错误消息的原因。

如果您告诉它所有参数实际上都是用于Shell的单个命令,则仍可以使用shell = true来运行:

subprocess.call(['cp -rf q.py w'], shell=True)