2015-07-11 125 views
1

我正在編寫一個程序,將文件從一個文件夾移動到另一個文件夾。有時候我會在這個過程中覆蓋文件。但是,每當我運行該文件時,都會詢問「覆蓋C:...(是/否/全部)」。我希望我的程序自動選擇「全部」。預先感謝您用os模塊覆蓋python文件

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() 

回答

1

如果您不能使用標誌。您可以嘗試使用subprocess.Popen應該做的正是你想要的東西寫標準輸入:

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

from subprocess import check_call 

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

如果你想上一個命令返回下一個運行前把p.wait()在EAC之間h呼叫等待過程返回。

如果要更換一個文件,那麼你不需要看看外面的蟒蛇,你可以使用shutil.move

from shutil import move 
move(sourceplayers, destinationplayers) 
+0

感謝您的回覆。我簡單地添加了/ y,它完美運行! –

2

這是因爲您正在使用系統調用來進行移動。您可以使用os.listdir的組合列出源內的所有文件和目錄,並使用shutil.move進行移動。

+0

我試圖shutil以前使用,但它不會讓我從我的複製程序文件(我道歉,因爲我忘了在我的問題中指定這個)。一些用戶建議我添加一個/ y並且它工作。無論如何,謝謝你的時間。 –

1

根據TechNet docs,它看起來像xcopy需要一個/y標誌,即「禁止提示以確認是否要覆蓋現有目標文件。」

我想你會使用這樣的:

os.system ("""xcopy "%s" "%s" /y""" % (sourceplayers, destinationplayers)) 
+0

感謝您提供該鏈接。這有助於澄清我的一些問題! –

1

您可以通過/y開關爲您的xcopy命令的一部分,始終覆蓋這些文件,但如果你嚴格想提供輸入(全選)作爲根據您的問題,嘗試類似https://github.com/pexpect/pexpect

+0

謝謝你的迴應!我添加了/ y並修復了它! –