2013-01-14 2 views
10

Ich versuche, ein Skript auf einem Remote-Host mit einer getrennten Bildschirmsitzung auszuführen. Ich habe die example Fabric gives ausprobiert und konnte leider nicht zur Arbeit kommen.Ich kann das abtrennbare Bildschirmsitzungsbeispiel von Fabric nicht zum Arbeiten bringen

from fabric.api import run 

def yes(): 
    run('screen -d -m "yes"') 

Ausführen fab yes auf meinem lokalen Rechner verbindet es richtig an die Remote-Host und sagt der Befehl ausgeführt wurde, aber nichts auf dem Remote-Host ausgeführt wird. Der Versuch, screen -d -m "yes" auf beiden Computern zu verwenden, funktioniert wie erwartet.

Wenn jemand darauf hinweisen könnte, was ich falsch mache, würde ich es sehr schätzen. Auch, nebenbei bemerkt, warum gibt es Zitate um das Ja im Befehl? Würde es ohne die Zitate funktionieren? Vielen Dank!

Antwort

14

run('screen -d -m yes; sleep 1') funktioniert.

Nicht sicher, ob Stoff oder Bildschirm für dieses Verhalten verantwortlich sind.

4

Obwohl AVB Antwort perfekt ist, werde ich einen kleinen Tipp hinzufügen, die jemandem wie mir helfen kann. Wenn Sie mehr als einen Befehl ausführen möchten, fügen Sie sie in eine ausführbare Datei ein.

Das wird nicht funktionieren:

run('screen -d -m "./ENV/bin/activate; python run.py; sleep 1"')

So eine run.sh-Datei erstellen:

#!/bin/bash 
source ENV/bin/activate 
python run.py 

Und verwenden Sie es wie run('screen -d -m ./run.sh; sleep 1')

+6

warum ist der "sleep 1;" Dort? – arikg

Verwandte Themen