-2

好吧,所以在 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   ")"

我怎样才能解决这个问题?

4

2 回答 2

1

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

于 2012-07-06T18:52:21.893 回答
0

你能具体说明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)
于 2012-07-06T19:07:50.583 回答