See:

        
https://stackoverflow.com/questions/8953119/python-waiting-for-external-launched-process-finish

François

> On Aug 7, 2017, at 2:35 PM, Ronaldo Bahia <[email protected]> wrote:
> 
> How can I do that?
> 
> Ronaldo Bahia
> +55 11 3280 6971
> +55 11 963 622 581
> 
> Materiais gratuitos para o RH:
> - ROI - Melhorando Indicadores no RH
> - Manual do Recrutador Moderno
> 
> 2017-08-07 18:32 GMT-03:00 "Александр Христюхин (roboslone)" 
> <[email protected]>:
> You can wait for subprocess to finish and not rely on time.sleep.
> 
>> On 7 Aug 2017, at 23:57, Ronaldo Bahia <[email protected]> wrote:
>> 
>> Turns out unoconv takes 2 seconds to perform the file conversion.
>> So after the file conversion, I had to set time.sleep(3) before upload a 
>> file to S3.
>> 
>> And after 1 week I got this working using variables.
>> 
>> Thanks
>> 
>> Ronaldo Bahia
>> +55 11 3280 6971
>> +55 11 963 622 581
>> 
>> Materiais gratuitos para o RH:
>> - ROI - Melhorando Indicadores no RH
>> - Manual do Recrutador Moderno
>> 
>> 2017-08-07 17:17 GMT-03:00 Ronaldo Bahia <[email protected]>:
>> I don't know why but if I set the string ("cv.pdf"), it process just fine.
>> If I use a variable instead, it doesn't.
>> 
>> Here is the working code:
>> 
>>         # convert to PDF
>>         env = os.environ.copy()
>>         env['HOME'] = '/tmp'
>>         subprocess.Popen(["unoconv","-f", "pdf", "-o", "cv.pdf","%s" % 
>> (file_in)], env = env)
>> 
>>         # Define S3 path
>>         resume_path = 'resumes/%s/' % str(date.today())
>>         
>>         # key is the S3 file name
>>         key = '%s%s' % (resume_path, file_out)
>>         
>>         # delete local file
>>         subprocess.call("rm -f %s" % user_cv_file, shell=True)
>>         
>>         # update the new file format
>>         user_cv.resume = key
>>         user_cv.save()
>>         
>>         # S3 Connection
>>         conn = S3Connection(settings.AWS_ACCESS_KEY_ID, 
>> settings.AWS_SECRET_ACCESS_KEY)
>>         bucket_out = Bucket(conn, settings.AWS_STORAGE_BUCKET_NAME)
>>         k_out = Key(bucket=bucket_out, name=user_cv.resume)
>> 
>>         # Upload to S3
>>         k_out.set_contents_from_filename('cv.pdf')
>>         k_out.make_public()
>> 
>>         # deleta o arquivo localmente
>>         subprocess.call("rm -f cv.pdf", shell=True)
>> 
>> Ronaldo Bahia
>> +55 11 3280 6971
>> +55 11 963 622 581
>> 
>> Materiais gratuitos para o RH:
>> - ROI - Melhorando Indicadores no RH
>> - Manual do Recrutador Moderno
>> 
>> 2017-08-07 8:16 GMT-03:00 "Александр Христюхин (roboslone)" 
>> <[email protected]>:
>> Well, yeah, you're using local path basically. And you should NEVER use 
>> .split('/')[-1] to determine file basename, take a look at os.path module 
>> instead.
>> 
>> But that's not the point. You should try to use absolute path, I believe it 
>> would do the trick.
>> 
>>> On 4 Aug 2017, at 17:49, Ronaldo Bahia <[email protected]> wrote:
>>> 
>>> the method is called in a def post() within a class view:
>>> 
>>> user_cv = CandidateCV.objects.get(user=request.user)
>>> user_cv_file = str(user_cv.resume).split('/')[-1]
>>> s3upload(user_cv_file)
>>> 
>>> The file is converted from doc to pdf in server project folder, where 
>>> manage.py is.
>>> So probably there is no absolute path.
>>> 
>>> How can I solve it?
>>> 
>>> Thanks
>>> Ronaldo Bahia
>>> +55 11 3280 6971
>>> +55 11 963 622 581
>>> 
>>> Materiais gratuitos para o RH:
>>> - ROI - Melhorando Indicadores no RH
>>> - Manual do Recrutador Moderno
>>> 
>>> 2017-08-03 1:36 GMT-03:00 "Александр Христюхин (roboslone)" 
>>> <[email protected]>:
>>> Hi,
>>> 
>>> Are you sure s3file contains absolute path? I can't see where s3upload is 
>>> being called.
>>> 
>>> Also, you might wanna use os.remove instead of calling subprocess.
>>> You also might wanna check out PEP-8 and Sphinx for your docstrings.
>>> 
>>>> On 2 Aug 2017, at 02:28, Ronaldo Bahia <[email protected]> wrote:
>>>> 
>>>> Hi everyone, can you help me?
>>>> Thanks in advance
>>>> 
>>>> Thread: 
>>>> https://stackoverflow.com/questions/45449102/django-python-oserror-no-such-file-or-directory-but-file-exists
>>>> 
>>>> Code:
>>>> 
>>>> 
>>>> 
>>>> down vote
>>>> favorite
>>>> I'm converting doc and docx files to pdf in the server using unoconv with 
>>>> LibreOffice. And I need to upload to S3 the converted file.
>>>> 
>>>> I can convert with success the files and I can see them in the server.
>>>> 
>>>> But when I try to upload the pdf, I get the error. What am I missing?
>>>> 
>>>> Thanks in advance
>>>> 
>>>> This works just fine:
>>>> 
>>>> import
>>>>  subprocess
>>>> 
>>>> from boto.s3.connection import S3Connection, Bucket, Key
>>>> 
>>>> 
>>>> 
>>>> def doc_to_pdf(user):
>>>> 
>>>>     
>>>> '''
>>>>     Convert doc or docx to PDF.
>>>> 
>>>>     parameter user: is a request.user
>>>> 
>>>>     Usage:
>>>>         doc_to_pdf(self.request.user):
>>>>     '''
>>>> 
>>>> 
>>>>     user_cv 
>>>> = CandidateCV.objects.get(user=user)
>>>> 
>>>>     user_cv_file 
>>>> = str(user_cv.resume).split('/')[-1] # tem que ser PDF
>>>> 
>>>>     user_cv_filetype 
>>>> = user_cv_file.split('.')[-1]
>>>> 
>>>> 
>>>>     
>>>> if not user_cv_filetype in settings.PDF_FILE_TYPE:
>>>> 
>>>>         
>>>> # Se não for PDF
>>>> 
>>>>         file_in 
>>>> = user_cv.resume.
>>>> url
>>>>         file_name 
>>>> = file_in.split('/')[-1]
>>>> 
>>>>         
>>>> # download
>>>> 
>>>>         urllib
>>>> .request.urlretrieve(file_in, file_name)
>>>> 
>>>>         file_out 
>>>> = user_cv_file.split('.')[0] + '.pdf'
>>>> 
>>>> 
>>>>         
>>>> # converte para PDF
>>>> 
>>>>         env 
>>>> = os.environ.copy()
>>>> 
>>>>         env
>>>> ['HOME'] = '/tmp'
>>>> 
>>>>         subprocess
>>>> .Popen(["unoconv","-f", "pdf", "%s" % (file_in)], env = env)
>>>> 
>>>> 
>>>>         
>>>> # Define a path para salvar o documento na S3
>>>> 
>>>>         resume_path 
>>>> = 'resumes/%s/' % str(date.today())
>>>> 
>>>> 
>>>>         
>>>> # key é o nome do arquivo na S3
>>>> 
>>>>         key 
>>>> = '%s%s' % (resume_path, file_out)
>>>> 
>>>> 
>>>>         
>>>> # deleta o arquivo localmente
>>>> 
>>>>         subprocess
>>>> .call("rm -f %s" % user_cv_file, shell=True)
>>>> 
>>>> 
>>>>         
>>>> # Salva o novo formato no banco
>>>> 
>>>>         user_cv
>>>> .resume =
>>>>  key
>>>>         user_cv
>>>> .save()
>>>> This is the code in which I get the error in line: 
>>>> k_out.set_contents_from_filename(s3file)
>>>> 
>>>> def s3upload(s3file):
>>>> 
>>>> 
>>>>     
>>>> # Conecta na AWS S3
>>>> 
>>>>     conn 
>>>> = S3Connection(settings.AWS_ACCESS_KEY_ID, settings.AWS_SECRET_ACCESS_KEY)
>>>> 
>>>>     bucket_out 
>>>> = Bucket(conn, settings.AWS_STORAGE_BUCKET_NAME)
>>>> 
>>>>     k_out 
>>>> = Key(bucket=bucket_out, name=s3file)
>>>> 
>>>> 
>>>>     
>>>> # Define a path para salvar o documento na S3
>>>> 
>>>>     resume_path 
>>>> = 'resumes/%s/' % str(date.today())
>>>> 
>>>> 
>>>>     
>>>> # key é o nome do arquivo na S3
>>>> 
>>>>     key 
>>>> = '%s%s' % (resume_path, s3file)
>>>> 
>>>>     k_out
>>>> .key =
>>>>  key
>>>> 
>>>>     
>>>> # Salva na AWS S3
>>>> 
>>>>     k_out
>>>> .set_contents_from_filename(s3file)
>>>> 
>>>>     k_out
>>>> .make_public()
>>>> 
>>>> 
>>>>     
>>>> # deleta o arquivo localmente
>>>> 
>>>>     subprocess
>>>> .call("rm -f %s" % s3file, shell=True)
>>>> 
>>>> 
>>>> -- 
>>>> You received this message because you are subscribed to the Google Groups 
>>>> "Django users" group.
>>>> To unsubscribe from this group and stop receiving emails from it, send an 
>>>> email to [email protected].
>>>> To post to this group, send email to [email protected].
>>>> Visit this group at https://groups.google.com/group/django-users.
>>>> To view this discussion on the web visit 
>>>> https://groups.google.com/d/msgid/django-users/7cecdcdb-7fcf-4f4a-858a-30801fa9cf9b%40googlegroups.com.
>>>> For more options, visit https://groups.google.com/d/optout.
>>> 
>>> 
>>> -- 
>>> You received this message because you are subscribed to a topic in the 
>>> Google Groups "Django users" group.
>>> To unsubscribe from this topic, visit 
>>> https://groups.google.com/d/topic/django-users/IDKZeRHtxyM/unsubscribe.
>>> To unsubscribe from this group and all its topics, send an email to 
>>> [email protected].
>>> To post to this group, send email to [email protected].
>>> Visit this group at https://groups.google.com/group/django-users.
>>> To view this discussion on the web visit 
>>> https://groups.google.com/d/msgid/django-users/6BC03BEF-B4AD-49AB-8A2A-6EDDAD0DB13F%40gmail.com.
>>> 
>>> For more options, visit https://groups.google.com/d/optout.
>>> 
>>> 
>>> -- 
>>> You received this message because you are subscribed to the Google Groups 
>>> "Django users" group.
>>> To unsubscribe from this group and stop receiving emails from it, send an 
>>> email to [email protected].
>>> To post to this group, send email to [email protected].
>>> Visit this group at https://groups.google.com/group/django-users.
>>> To view this discussion on the web visit 
>>> https://groups.google.com/d/msgid/django-users/CAGz5-6gvNNWthLEFfyFicV_7voe75oWKypXP6LxsuzKLeTWzDg%40mail.gmail.com.
>>> For more options, visit https://groups.google.com/d/optout.
>> 
>> 
>> -- 
>> You received this message because you are subscribed to a topic in the 
>> Google Groups "Django users" group.
>> To unsubscribe from this topic, visit 
>> https://groups.google.com/d/topic/django-users/IDKZeRHtxyM/unsubscribe.
>> To unsubscribe from this group and all its topics, send an email to 
>> [email protected].
>> To post to this group, send email to [email protected].
>> Visit this group at https://groups.google.com/group/django-users.
>> To view this discussion on the web visit 
>> https://groups.google.com/d/msgid/django-users/3DE439B9-5926-42DC-9862-85FF20DD66BE%40gmail.com.
>> 
>> For more options, visit https://groups.google.com/d/optout.
>> 
>> 
>> 
>> -- 
>> You received this message because you are subscribed to the Google Groups 
>> "Django users" group.
>> To unsubscribe from this group and stop receiving emails from it, send an 
>> email to [email protected].
>> To post to this group, send email to [email protected].
>> Visit this group at https://groups.google.com/group/django-users.
>> To view this discussion on the web visit 
>> https://groups.google.com/d/msgid/django-users/CAGz5-6iVk1zxDNsxqLJ1qg3DujT%3DSXZTwXvdokWN%2BHznET-J9g%40mail.gmail.com.
>> For more options, visit https://groups.google.com/d/optout.
> 
> 
> -- 
> You received this message because you are subscribed to a topic in the Google 
> Groups "Django users" group.
> To unsubscribe from this topic, visit 
> https://groups.google.com/d/topic/django-users/IDKZeRHtxyM/unsubscribe.
> To unsubscribe from this group and all its topics, send an email to 
> [email protected].
> To post to this group, send email to [email protected].
> Visit this group at https://groups.google.com/group/django-users.
> To view this discussion on the web visit 
> https://groups.google.com/d/msgid/django-users/CF82D6DD-FCC0-4BE4-BB27-F5011F2C66E0%40gmail.com.
> For more options, visit https://groups.google.com/d/optout.
> 
> 
> -- 
> You received this message because you are subscribed to the Google Groups 
> "Django users" group.
> To unsubscribe from this group and stop receiving emails from it, send an 
> email to [email protected].
> To post to this group, send email to [email protected].
> Visit this group at https://groups.google.com/group/django-users.
> To view this discussion on the web visit 
> https://groups.google.com/d/msgid/django-users/CAGz5-6ghkASX2Qgam3KR5pcuUg4qAcHv3AnDQdp5RQDkvjiqvg%40mail.gmail.com.
> For more options, visit https://groups.google.com/d/optout.

-- 
You received this message because you are subscribed to the Google Groups 
"Django users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
Visit this group at https://groups.google.com/group/django-users.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/django-users/218DCE95-6412-46AB-8F6F-D2641E14DD18%40gmail.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to