Ich habe Probleme zu verstehen, warum genau das hängt. Ich habe dieses Beispiel auf die Kernkomponenten reduziert. Ich habe eine Datei, nennen wir es do_ls.py
Ausführen von Fabric-Befehl in separater Prozessgruppe Hängen
import fabric.api
import time
host = "myhost.mydomain"
username = "username"
password = "password"
def main():
with fabric.api.settings(host_string=host,user=username,password=password):
result = fabric.api.run("ls")
if __name__ == "__main__":
main()
Wenn ich diesen Befehl ausführen: python do_ls.py
es korrekt ausgeführt wird. Jetzt für das Problem. Ich möchte das in seinem eigenen Prozess ausführen. Also habe ich diese Datei haben, machen wir es main.py
import sys
import os
import logging
import subprocess as sp
import time
def main():
logging.basicConfig(level=logging.DEBUG)
cmd = [sys.executable, "/path/to/do_ls.py"]
p = sp.Popen(cmd, preexec_fn=os.setpgrp)
while p.poll() is None:
print "Sleeping..."
time.sleep(0.5)
print "All Done."
if __name__ == "__main__":
main()
nennen
nun für immer, wenn ich python main.py
diese hängen wird laufen. Das Problem, soweit ich weiß, ist, dass ich den Prozess in einer Untergruppe (d. H., Wenn ich preexec_fn=os.setpgrp
herausnehmen, dann wird es richtig funktionieren). Was ich nicht verstehe ist, warum das so ist. Vor allem vorausgesetzt, dass die folgenden funktioniert:
cmd = ["ssh", "-q", "[email protected]", "ls"]
p = sp.Popen(cmd, preexec_fn=os.setpgrp)
Jeder Einblick würde sehr geschätzt werden.
Hey Ryan. Danke für die Antwort. Ich benutze immer noch die Abfrage im "Arbeits" -Beispiel, ich ersetzte einfach den Befehl, den ich ausführte. Entschuldigung, wenn dieser Teil verwirrend war. Also ich denke nicht, dass das das Problem ist. Ich sagte nur, dass ein anderer Befehl funktionierte. Danke noch einmal. – loganasherjones