Garantindo que meu programa não esteja executando uma gravação simultânea de arquivos
Estou escrevendo um script que é necessário para executar gravações seguras em qualquer arquivo, ou seja, anexar um arquivo se nenhum outro processo estiver gravado nele. Meu entendimento da teoria era que gravações simultâneas eram impedidas usando bloqueios de gravação no sistema de arquivos, mas parece não ser o caso na prática.
Aqui está como eu configuro meu caso de teste: Estou redirecionando a saída de um comando ping:
ping 127.0.0.1 > fileForSafeWrites.txt
Por outro lado, tenho o seguinte código python tentando gravar no arquivo:
handle = open('fileForSafeWrites.txt', 'w')
handle.write("Probing for opportunity to write")
handle.close()
Executando simultaneamente, ambos os processos são concluídos normalmente. eu vejo issofileForSafeWrites.txt se transformou em um arquivo com conteúdo binário, em vez de um bloqueio de gravação emitido pelo primeiro processo que o impede de ser gravado pelo código Python.
Como forço um ou ambos os meus processos simultâneos a não interferir um com o outro? Eu li que as pessoas aconselham a capacidade de obter um identificador de arquivo de gravação como prova de que o arquivo está sendo gravado como seguro, como emhttps://stackoverflow.com/a/3070749/1309045
Esse comportamento é específico ao meu sistema operacional e Python. Eu uso o Python2.7 em um ambiente Ubuntu 12.04.