2016-03-28 7 views
1

Ich automatisiere einige langweilige Shell-Aufgaben, meist Dateikonvertierungen, in einer Art stumpfen Kraftweg mit os.system Aufrufe (Python 2.7). Aus irgendeinem seltsamen Grund scheint mein laufender Interpreter jedoch nicht in der Lage zu sein, die Dateien zu finden, die ich gerade erstellt habe.Python: Dateien in kürzlich geändertem Verzeichnis (OSx) nicht finden

Beispielcode:

import os, time, glob 

# call a node script to template a word document 
os.system('node wordcv.js') 

# print the resulting document to pdf 
os.system('launch -p gowdercv.docx') 

# move to the directory that pdfwriter prints to 
os.chdir('/users/shared/PDFwriter/pauliglot') 

print glob.glob('*.pdf') 

Ich erwarte eine Länge 1 Liste mit den daraus resultierenden Dateinamen haben, stattdessen ich eine leere Liste erhalten.

Das gleiche geschieht mit

pdfs = [file for file in os.listdir('/users/shared/PDFwriter/pauliglot') if file.endswith(".pdf")] 
print pdfs 

ich von Hand überprüft haben, und die erwarteten Dateien sind eigentlich, wo sie eigentlich sind sein.

Auch ich hatte den Eindruck, dass OS.System blockiert, aber nur für den Fall, dass es nicht, ich steckte auch eine time.sleep(1) dort vor der Suche nach den Dateien. (Das ist mehr als genug Zeit für die anderen Aufgaben zu beenden.) Immer noch nichts.

Hmm. Hilfe? Vielen Dank!

Antwort

0

Sie sollten eine Wartezeit nach dem Anruf zu launch hinzufügen. Launch laicht die Aufgabe im Hintergrund und kehrt zurück, bevor das Dokument fertig gedruckt ist. Sie können entweder beliebige sleep-Anweisungen eingeben oder Sie können auch nach Dateiexistenzen suchen, wenn Sie wissen, wie der erwartete Dateiname aussehen wird.

import time 
# print the resulting document to pdf 
os.system('launch -p gowdercv.docx') 
# give word about 30 seconds to finish printing the document 
time.sleep(30) 

Alternative:

import time 
# print the resulting document to pdf 
os.system('launch -p gowdercv.docx') 
# wait for a maximum of 90 seconds 
for x in xrange(0, 90): 
    time.sleep(1) 
    if os.path.exists('/path/to/expected/filename'): 
     break 

Referenz für potenziell benötigen eine längere als die zweite 1 warten here

+0

wow, es ist wirklich so einfach war. Ich fühle mich jetzt dumm. :-) Vielen Dank! –