2015-12-03 3 views
0

Я хочу, чтобы можно было настроить подпроцесс, который записывает файл на сервер, а затем дождаться, пока он не будет полностью закончен, прежде чем обращаться к родительский процесс. Получаю файл изображения из запроса на отправку. Я разбираю его, и я пишу его на сервер со следующим кодом ... это нормально.Файл python является неполным, как дождаться завершения, прежде чем обращаться к родительскому процессу.

path="/var/bla/bla/bla/" 
original_fname = file1['filename'] 
output_file = open(os.path.join(path,original_fname), 'w') 
output_file.write(file1['body']) 

Проблема заключается в том, то у меня есть доступ к этому файлу с помощью ImageMagick инструмент командной строки, после того, как он будет создан, чтобы получить определенные данные. Но с вышеуказанным кодом это слишком рано, и процесс не завершен, создавая файл. я хочу сделать это после кода выше ...

subprocess.Popen(stdout=output_file) 
Popen.communicate() 

но получаю следующее сообщение об ошибке ....

объект 'POPEN' не имеет атрибута '_child_created'

Как я могу это исправить?

+2

закрываете вы файл после того, как вы закончите писать? Попробуйте закрыть файл после того, как вы закончите писать. – Kevin

+0

Hi Kevin, No. Как бы Вы это сделали? – whoopididoo

+0

В этом случае 'output_file.close()'. – Kevin

ответ

2

Вы не закрыли файл после его написания. Вы можете сделать это следующим образом:

output_file = open(os.path.join(path,original_fname), 'w') 
output_file.write(file1['body']) 
output_file.close() 

Но я рекомендую использовать with ключевое слово, которое заботится о закрытии дескриптора файла, даже если ошибка происходит в блоке:

with open(os.path.join(path,original_fname), 'w') as output_file: 
    output_file.write(file1['body']) 
+0

Очень приятно. Мне нравится второй вариант, спасибо. – whoopididoo

Смежные вопросы