【问题标题】:Why is my python sub-process not working with a move command?为什么我的 python 子进程不能使用移动命令?
【发布时间】:2012-07-07 06:05:36
【问题描述】:

好的,所以在 Windows 中使用 Python 我正在尝试运行一个批处理命令,该命令是移动文件的“移动”命令。我知道它可以使用 python 中的shutil 来完成,但它给我带来了麻烦。

move /-y "%~dp0itself.py" "C:\folder\folder2\"

作为批处理文件单独运行时效果很好。

import subprocess
    process = subprocess.Popen(move /-y "%~dp0sarpedon.py" "C:\Utility\Config\", shell=True, stdout=subprocess.PIPE)
process.wait()
print process.returncode

我尝试将它添加到 python 中的其他一些代码的末尾,但我不断收到错误,它说我的语法无效,因为

"%~dp0sarpedon.py   (")

我用来修复它的很多尝试都以错误结束:

EOL while scanning string literal.

因为右括号

(move /-y "%~dp0sarpedon.py" "C:\Utility\Config\", shell=True, stdout=subprocess.PIPE   ")"

我该如何解决这个问题?

【问题讨论】:

标签: python windows batch-file subprocess move


【解决方案1】:

你能具体说明shutil 遇到了什么麻烦吗?你忘了双反斜杠吗?或者文件或目录是否需要管理员权限?

以下是否导致错误?

import shutil
shutil.move("%~dp0itself.py", "C:\\folder\\folder2")

在我的 64 位 Windows 机器上运行时使用此行移动了文件。

至于你的代码为什么不能工作——我认为是因为 \",尝试使用双反斜杠 \,否则字符串解释器不会结束字符串。或者它会创建一些奇怪的字符来代替你所有的分隔符。

如果您致力于使用子进程,请尝试使用组合字符串作为移动和目标命令:

import subprocess
process = subprocess.Popen("move /-y %~dp0sarpedon.py C:\\Utility\\Config\\",
                           shell=True, stdout=subprocess.PIPE)

【讨论】:

    【解决方案2】:

    您需要阅读有关 Popen 工作原理的文档。您不能只在括号之间转储命令行。您必须将命令及其参数作为列表中的字符串传递。阅读the documentation

    【讨论】:

    • 感谢您的帮助!
    猜你喜欢
    • 1970-01-01
    • 2017-01-02
    • 2015-05-10
    • 1970-01-01
    • 1970-01-01
    • 2020-10-27
    • 2020-05-29
    • 1970-01-01
    • 2018-07-02
    相关资源
    最近更新 更多