2016-04-18 6 views
0

ich unten Code haben:os Befehl schreibt nicht in die Datei

import os, subprocess 
def cfile(): 
     p = r'/mypath/abc' 
     cmd = ["who am i | awk '{print $1}'"] 
     if not os.path.exists(p): 
       fh = open(p, 'a') 
       try: 
        subprocess.Popen(cmd, stdout=fh) 
       finally: 
        fh.close() 
cfile() 

obigen Code die Datei ‚Ordner‘, aber nicht das Schreiben etwas genannt wird, zu schaffen. Kannst du mir bitte helfen, herauszufinden, was hier falsch ist? Ich benutze Python 2.7

+1

Sollten Sie nicht versuchen, in eine Datei _inside_ '/ Mypath/Ordner auszugeben? – Chris

+0

Funktioniert für mich: erstellt eine normale Datei (kein Verzeichnis) namens 'Ordner' mit dem Datum darin. – Malvolio

+0

@Chris Ich erstelle eine Datei namens "Ordner" unter meinem Pfadverzeichnis und möchte die "Datum" -Ausgabe an diese Datei anhängen –

Antwort

0

Sie können .wait() auf jedem Popen-Objekt aufrufen, um sicher zu sein, dass es fertig ist und dann flush() aufrufen. Vielleicht etwas wie das:

import os 
import subprocess 


def cfile(): 
    p = r'/mypath/abc' 
    cmd = ["who am i | awk '{print $1}'"] 
    fh = open(p, 'a+') 
    try: 
     sb = subprocess.Popen(cmd, shell=True, universal_newlines=True, stdout=fh) 
     sb.wait() 
     fh.flush() 
    finally: 
     fh.close() 

cfile() 
+0

Vielen Dank. Kannst du mich bitte über das Anhängen des gleichen informieren. Wenn ich den gleichen Code erneut ausführen, sollte die gleiche Datei von der nächsten Zeile an anhängen. Ich habe 'fh = open (p, 'a')' versucht, aber nicht funktioniert. –

+0

Ich habe die Lösung geändert, um die Datei zu erstellen, wenn sie nicht existiert und sie anhängen. Bitte akzeptieren Sie die Antwort, wenn es für Sie funktioniert. –

+0

danke dir so sehr. Es funktioniert jetzt. –