【问题标题】:python3 subprocess module can not work for cppython3子进程模块不能用于cp
【发布时间】:2020-10-06 04:35:17
【问题描述】:

代码如下,但我发现错误发生的原因,当我运行“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

【问题讨论】:

  • 我也试过 subprocess.call(['cp','-rf','/tmp/test.py','/tmp/blacktest/'],shell=True),但是得到同样的错误
  • shell=True 提示:当你运行sh -c cp -rf /tmp/test.py /tmp/balcktest 时,你会得到同样的错误。你明白shell 是做什么的吗?

标签: linux shell subprocess python-3.6 cp


【解决方案1】:

简答: 去掉 shell=True (也去掉 '.' 之前的反斜杠,你为什么需要它?)比如:

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

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

import shutil
shutil.copyfile(src, dst)

长答案

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

这意味着 -c 之后的第一个参数是使用 /bin/sh 执行的命令。您的第一个参数是 cp,然后单独执行,没有任何参数...这就是您看到错误消息的原因。

如果你告诉它所有参数实际上是 shell 的一个命令,你仍然可以使用 shell=true 运行:

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

【讨论】:

    猜你喜欢
    • 2017-01-22
    • 2015-11-29
    • 1970-01-01
    • 2017-08-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-26
    • 1970-01-01
    相关资源
    最近更新 更多