【问题标题】:subprocess.CalledProcessError When running robocopy from Python 3 on Windows 7subprocess.CalledProcessError 在 Windows 7 上从 Python 3 运行 robocopy 时
【发布时间】:2015-09-28 21:18:31
【问题描述】:

我正在尝试使用 robocopy 和 python 3 将媒体从一台 Windows 机器复制到网络上的另一台机器。

我几乎尝试了subprocessrobocopy 的所有组合,但我仍然遇到错误。

这是我最近的尝试:

print(subprocess.check_output(["robocopy", "\\172.21.81.23\c\media\\ \\172.21.81.10\c\media\videos\\"], shell=True))

我不确定是反斜杠还是什么,但我总是得到以下响应:

Traceback (most recent call last):
  File "",line 7, in tableChange
  File "C:\Program Files  line 586, in check_output
    raise CalledProcessError(retcode, process.args, output=output)
subprocess.CalledProcessError: Command '['robocopy', '\\172.21.81.23\\c\\media\\cmsupload\\ \\172.21.81.10\\c\\media\\videos\\']' returned non-zero exit status 16

有人有什么建议吗?

【问题讨论】:

    标签: python subprocess robocopy


    【解决方案1】:

    您要么不拆分参数(并使用shell=True),要么完全拆分它们(并且不使用shell=True),您不能只从参数中拆分命令。此外,对于 Windows 路径,您希望使用原始字符串来避免意外在路径中处理 ASCII 转义的问题(以 r 为前缀,例如 r'\\foo\bar',并且不要包含尾部斜杠,否则事情会变得奇怪)所以你可以这样做:

    print(subprocess.check_output(['robocopy', r'\\172.21.81.23\c\media', r'\\172.21.81.10\c\media\videos']))
    

    【讨论】:

    • 这个说明应该在python文档中。我想知道分裂与否。
    • documentation of Popen's args。引用:“应该是一个字符串,或者一系列程序参数......如果传递单个字符串,shell 必须为 True(见下文),否则字符串必须简单地命名要执行的程序而不指定任何参数。”
    • 运行你的确切代码给我returned non-zero exit status 2
    • 看看the docs on robocopy's exit codes。似乎检测到了“额外”文件;日志应该提供更多信息。
    猜你喜欢
    • 1970-01-01
    • 2014-03-05
    • 1970-01-01
    • 2012-09-15
    • 1970-01-01
    • 2013-04-01
    • 2011-06-06
    • 2011-12-01
    • 1970-01-01
    相关资源
    最近更新 更多