完全に機能するWindows上の2つのディレクトリを同期するスクリプトをpython3.3で作成しました。後で実行可能ファイルにしたかったので、python 2.7 に移植しました (cx_freeze で「モジュールが見つかりません」というエラーが表示されます)。ただし、この奇妙な問題に遭遇しています。これは、プログラムにファイルパスを入力するたびにエラーが発生することです。たとえば、「C:\Users\Me\SourceDir」を入力すると、プログラムが中断し、
File "<string>", line 1
C:\Users\Me\SourceDir
^
Syntax Error: Invalid Syntax
これがなぜなのか、私は混乱しています。このプログラムは python3.3 で問題なく動作します (同じパスを追加する必要があります)。これにより、2.7 では裏で何か奇妙なことが起こっていると思われます。
なぜこれが起こるのか、そしてそれを修正する方法を誰かが私に説明できますか?
また、ここにプログラムのソースがありますが、本当に重要だとは思いません
'''
Created on Mar 18, 2013
@author: pipsqueaker
'''
import os, shutil, time
from datetime import datetime
class mainClass():
def __init__(self):
self.srcDir = []
self.dst = []
self.iteration = 1
self.fileHash = {}
self.slash = ""
def getParentDir(self, string, slash):
slashCount = 0
tempCount = 0
realDir = ""
for x in string:
if x == "/" or x == "\\":
slashCount += 1
for y in string:
if y == "/" or y == "\\":
tempCount += 1
if tempCount < slashCount:
realDir += y
else:
break
realDir += slash
return realDir
def initializeDirs(self):
#Initialize Paths from the setup files
onWindows = (os.name == 'nt')
if onWindows:
self.slash = "\\"
else:
self.slash = "/"
os.chdir(self.getParentDir(os.path.realpath(__file__), self.slash))
if os.path.exists("srcDir") == False:
print("The srcDir file does not exist; Creating Now...")
self.srcDir = input("Please input source directory \n")
self.newSource = open("srcDir", "w")
if self.srcDir[self.srcDir.__len__() -1] != self.slash:
self.srcDir += self.slash
self.newSource.write(self.srcDir)
self.newSource.close()
if os.path.exists("dstDirs") == False:
print("The dstFirs file does not exits; Creating Now...")
print("Input a directory to sync to. Or just type xit to exit")
self.newDst = open("dstDirs", "w")
while True:
self.IN = input()
if os.name == 'nt': #Windows
self.IN.replace("/", "\\")
else:
self.IN.replace("\\", "/")
if self.IN != "xit":
if self.IN[self.IN.__len__() -1] != self.slash:
self.IN += self.slash
self.newDst.write(self.IN)
self.dst.append(self.IN)
else:
self.newDst.close()
break
self.srcDir = open("srcDir", "r")
self.srcDir = self.srcDir.readline()
self.dstDirs = open("dstDirs", "r")
for line in self.dstDirs:
self.dst.append(line)
def fileHashes(self):
self.fileHash = {}
for file in os.listdir(self.srcDir):
self.fileHash[file] = os.path.getmtime(self.srcDir+file)
def loopForever(self):
print("Filesync Version 1.0 by pipsqueaker \n")
while True:
print("Iteration ", self.iteration, " @ ", datetime.now()) #APPROVE
for destination in self.dst:
for checkFile in os.listdir(destination):
if not os.path.exists(self.srcDir+checkFile):
os.remove(destination+checkFile)
print(checkFile, " removed from ", destination, " @", datetime.now())
self.fileHashes()
for file in os.listdir(self.srcDir):
if os.path.exists(destination+file):
try:
if os.path.getmtime(self.srcDir+file) != self.fileHash[file]:
try:
shutil.copy2((self.srcDir+file), destination)
print(file," was updated to ",destination," @",datetime.now())
except:
pass
except KeyError:
continue
else:
try:
shutil.copy2((self.srcDir+file), destination)
print(file, " was copied to ", destination, " @", datetime.now())
self.fileHashes()
except:
pass
self.iteration += 1
time.sleep(10)
def main(self):
self.initializeDirs()
self.fileHashes()
self.loopForever()
n = mainClass()
n.main()