2016-06-19 18 views
0


In diesem Code erstellt subprocess.Popen /tmp/test.txt mit date Ausgabe. Warum funktionieren die 2. "Druckzeilen" nicht? Ich würde für Ihre Hilfe danken.So lesen Sie die Datei der Subprozessausgabe

test]# touch /tmp/test.txt 
test]# ./x1.py 
/tmp/test.txt 
() 
/tmp/test.txt 
() 
test]# ./x1.py 
/tmp/test.txt 
('Sun Jun 19 15:10:21 PDT 2016\n',) 
/tmp/test.txt 
() 
test]# cat x1.py 
#!/usr/bin/python 

from subprocess import Popen, PIPE 

filename = "/tmp/test.txt" 

lines = tuple(open(filename, 'r')) 
print filename 
print lines # this is not empty 

file_ = open(filename, "w") 
Popen("date", shell=True, stdout=file_) 
file_.close() 

lines = tuple(open(filename, 'r')) 
print filename 
# why is this empty even if file_ definitely created the /tmp/test.txt ? 
print lines  
test]# 
+1

Funktioniert gut für mich auf Ubuntu –

+0

Neben: Warum sind Sie in einer Root-Shell? – edwinksl

+1

Haben Sie '.wait()' ing in Betracht gezogen, damit der Popen fertig ist, bevor er seinen 'stdout' schließt? –

Antwort

2

Sie müssen .wait() für die Popen vor dem Schließen der stdout zu beenden, andernfalls Sie nicht definiertes Verhalten zu bekommen.

Popen("date", shell=True, stdout=file_).wait() 
#          ^add this part! 

ich nicht sicher sagen kann, wie die Datei zu geschrieben wurde nach Sie von ihm zu lesen versucht, aber ich mir vorstellen, dass ist eine Implementierung Detail für Ihr Betriebssystem.

Verwandte Themen