为什么我的python子进程不能使用move命令?

时间:2012-07-06 18:47:20

标签: python windows batch-file subprocess move

好吧,所以使用Python与Windows我试图运行批处理命令,这是移动文件的“移动”命令。我知道可以在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   ")"

我该如何解决这个问题?

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分: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)