У меня есть функция, которая вызывается повторно и записывает данные об ошибках в файл журнала через subprocess
, однако всякий раз, когда в файл записываются новые данные, старые данные очищается. Таким образом, это не добавление новых данных со старыми данными.с открытым (файл, 'a +'), поскольку f не добавляется
Я делаю следующее:
error_file = '\\\\some\\unc\\path\\error.log'
class Node:
def __init__(self, path, rev):
self.path = path
self.rev = rev
def __hash__(self):
return hash((self.path, self.rev))
def __eq__(self, node):
return (self.path, self.rev) == (node.path, node.rev)
def __ne__(self, node):
return not(self == node)
def get_excluded_nodes(excludes_dir):
nodes = list()
for root, subdirs, files in os.walk(os.path.dirname(excludes_dir)):
if 'flagged' in files:
with open(os.path.join(root, 'flagged')) as f:
for line in f.readlines():
try:
comps = line.split(' -a')
path = comps[0].strip()
rev = comps[1].split(':')[0].strip()
Nodes.append(Node(path,rev))
except:
pass
return nodes
def export_node(node, path=archive_dir):
with open(error_file, 'a') as f:
try:
comps = node.path.split('/')
if '.' in comps[len(comps)-1]:
os.makedirs(os.path.join(archive_dir, '/'.join(comps[:-1])))
else:
os.makedirs(os.path.join(archive_dir, node.path))
subprocess.call(['svn', 'export', os.path.join(some_path, node.path), another_path)], stderr=f)
except:
pass
def remove_duplicate_nodes(nodes):
return set(nodes)
if __name__ == '__main__':
all_nodes = get_excluded_nodes(os.path.realpath(__file__))
nodes = remove_duplicate_nodes(all_nodes)
for node in nodes:
export_node(node)
Почему это не работает?
@Chris_Rands Я тоже пробовал это. Это делает то же самое. –
Я пробовал свой код (достаточно модифицированный, чтобы фактически запустить что-то), и он работал нормально. Вы уверены, что 'my_program' не записывает в ваш файл такие символы, как' \ r' и т. Д., Что делает вывод неправильным при просмотре? – FatalError
@FatalError 'my_program' на самом деле,' ['svn', 'export', some_path, another_path] ' –