2012-04-12 14 views
0

Ich benutze das Subprozess-Modul, um einen Befehl in Python auszuführen. Aber das Problem ist, dass ich auch eine Zeichenfolge (für einen Dateinamen) in den Befehl aufnehmen möchte.Wie führe ich einen Befehl mit String-Formatierung aus?

Ein Beispiel dafür, was ich tun möchte:

from subprocess import call 

    command = "cd/DirectoryName" 

    call = [(command)] 

In diesem speziellen Beispiel I Directory wollen eine Variable vom Benutzer festgelegt werden.

Was ich ohne Erfolg versucht:

Desktop=raw_input() 
    cmd="'cd %s'(Desktop/)" 
    call([cmd]) 

Hier ist der Fehler, den ich bekomme, wenn ich versuche, diese Befehle in dem Python-Shell auszuführen.

Chicken='Chicken' 
    command = 'say %s' % (Chicken) 
    print command 
    say Chicken 
    call([command]) 

    Traceback (most recent call last): 
    File "/Applications/WingIDE.app/Contents/MacOS/src/debug/tserver/_sandbox.py", line 1,  in <module> 
    # Used internally for debug sandbox under external interpreter 
    File "/Library/Frameworks/EPD64.framework/Versions/7.2/lib/python2.7/subprocess.py", line 493, in call 
    return Popen(*popenargs, **kwargs).wait() 
    File "/Library/Frameworks/EPD64.framework/Versions/7.2/lib/python2.7/subprocess.py", line 679, in __init__ 
    errread, errwrite) 
    File "/Library/Frameworks/EPD64.framework/Versions/7.2/lib/python2.7/subprocess.py", line 1228, in _execute_child 
    raise child_exception 
    OSError: [Errno 2] No such file or directory 

Ich habe es gerade versucht und es hat die Shell zum Absturz gebracht.

Chicken="Chicken" 
    print Chicken 
    Chicken 
    call[("say %s" % (Chicken)] 

Antwort

1

So funktioniert String-Interpolation nicht.

cmd='cd %s' % (Desktop,) 
+0

Danke für die Hilfe mit der Syntax. Ich habe die Frage mit dem Fehler aktualisiert, den ich bekomme. Ich sehe nicht, wie sich die Datei oder das Verzeichnis auf den Befehl auswirken würde, den ich ausführen wollte. – ironcyclone

+0

Einfach. Es gibt keinen Befehl mit dem Namen "cd ". Es gibt einen "cd" -Befehl, aber das ist nicht das, was Sie gerade ausführen. –

+0

Aber in dem Beispiel, das ich gepostet habe, sagt der Computer das Wort sprechen. Wie hätte es "Hühnchen" sagen sollen, als ich die Ruferklärung ausgeführt habe. – ironcyclone

0

First off,

cmd="'cd %s'(Desktop/)" 

Scheint nicht wie es "printf" % s.

Vielleicht

cmd="'cd %s/'%(Desktop)" 

Aber ich weiß noch nicht, ob das interpoliert werden, da es in einem String ist die „Call“ Funktion und ein Python-Befehl - würde das nicht auf den Befehl aufrufen Linie?

Verwandte Themen