好吧,所以使用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 ")"
我该如何解决这个问题?
答案 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)