Image

Imageeking_go wrote in Imageru_python

Файлы и ввод-вывод.

Может быть я чего-то не понимаю, но почему подобный код:

for Net in networks :
   print 'ping network ' + Net + ' ...'
   чего-то делаю...

print 'parsing results ...'

rf = open('result.csv','w') 

for sw in switchs :
   rf.write( swip + ',' + i + ',' + ipmac[i] + ',' + macport[ ipmac[i] ])

r.flush()
r.close()

print 'end !'

Выводит строки "ping network" и "parsing results" не на экран, как ожидается, а в файл result.csv? По логике вещей, в момент вывода этих строк питон вообще ни о каком файле еще не знает - я его еще не открывал...
И почему в коде
logfile=open('sitesync.log', 'w')

dt = datetime.datetime.now() 
d = dt.strftime(datestrf)
logfile.write(d + 'Start File Sync\n')
logfile.flush()

p = subprocess.Popen(['/usr/bin/rsync','-avz','--exclude vars.inc.php','7@ftp.ru::/public_html/','/'], 
                         stdin=subprocess.PIPE, stdout=logfile, stderr=logfile, env={'RSYNC_PASSWORD':'fffff'} ) 
p.wait()

p = subprocess.Popen(['/bin/chown','-R','2:2','/'], 
                         stdin=subprocess.PIPE, stdout=logfile, stderr=logfile) 
p.wait()

dt = datetime.datetime.now()
d = dt.strftime(datestrf)
logfile.write(d + 'End File Sync\n')  
logfile.flush()

dt = datetime.datetime.now()
d = dt.strftime(datestrf)
logfile.write(d + 'Start DB Backup to file ' + runpath + 'mitro__tv_ru.sql' + '\n')


Если убрать logfile.flush() то запись в лог идет не в том порядке, в котором выполняются действия команды. Хотя я явно прописывал p.wait() ...
В общем, скорее всего, я чего-то не понимаю.