首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用os模块覆盖python文件

用os模块覆盖python文件
EN

Stack Overflow用户
提问于 2015-07-11 17:33:27
回答 4查看 1.5K关注 0票数 1

我正在编写一个程序,将文件从一个文件夹移动到另一个文件夹。有时我会在这个过程中覆盖文件。然而,每当我运行该文件时,都会被要求“覆盖C:.(是/否/全部)”。我希望我的程序总是自动选择“全部”。提前谢谢你

代码语言:javascript
复制
import os
from tkinter import *
screen = Tk()
sourceplayers = 'C:\\Program Files (x86)\...\players' 
destinationplayers = 'C:\\memory\Will\players'
sourceuserdata = ('C:\\\\Program Files (x86)\...\remote'
destinationuserdata = 'C:\\\\memory\\Will\\remote'

def copyout(): 
    os.system ("""xcopy "%s" "%s" """ % (sourceplayers, destinationplayers)) 
    os.system ("""xcopy "%s" "%s" """ % (sourceuserdata, destinationuserdata)) #save


def movein():
    os.system ("""xcopy "%s" "%s" """ % (destinationplayers, sourceplayers))
    os.system ("""xcopy "%s" "%s" """ % (destinationuserdata, sourceuserdata))  

button = Button(screen, text="save", command=copyout)
button1 = Button(screen, text="overwrite", command=movein)
button.pack()
button1.pack()
screen.mainloop()
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2015-07-11 17:57:45

如果你不能使用旗子。您可以尝试使用subprocess.Popen编写stdin,这应该完全符合您的要求:

代码语言:javascript
复制
from subprocess import PIPE,Popen

p = Popen(["xcopy",sourceplayers, destinationplayers],stdin=PIPE)
p.stdin.write("All\n")
p = Popen(["xcopy",sourceuserdata, destinationuserdata],stdin=PIPE)
p.stdin.write("All\n")

无论哪种方式,您都应该在os.system上真正使用子流程模块,子进程是os.popen、os.system等的替代品。

如果/y对所有文件都有效,请使用subprocess.check_call

代码语言:javascript
复制
from subprocess import check_call

check_call(["xcopy","/y",sourceuserdata, destinationuserdata])

如果希望在运行下一个命令之前返回前面的命令,请在每个调用之间放置一个p.wait(),以等待进程返回。

如果要替换文件,则不需要查看python之外的内容,可以使用shutil.move

代码语言:javascript
复制
from shutil import move
move(sourceplayers, destinationplayers)
票数 1
EN

Stack Overflow用户

发布于 2015-07-11 17:38:59

这是因为您正在使用系统调用来执行移动操作。您可以使用os.listdir组合列出源文件和目录中的所有文件和目录,并使用shutil.move进行移动。

票数 2
EN

Stack Overflow用户

发布于 2015-07-11 17:40:37

根据TechNet文档,看起来xcopy使用了一个/y标志,“禁止提示您要覆盖现有的目标文件”。

我想你会这样用它:

代码语言:javascript
复制
os.system ("""xcopy "%s" "%s" /y""" % (sourceplayers, destinationplayers))
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31359920

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档