我無法準確理解掛起的原因。我已將這個例子分解爲核心組件。我有一個文件,姑且稱之爲do_ls.py
在單獨進程組掛起中運行結構命令
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()
如果我運行此命令:python do_ls.py
它會正確執行。現在解決問題。我想在它自己的過程中運行它。所以我有這個文件,我們稱之爲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()
現在,如果我跑python main.py
這將永遠掛起。據我所知,問題在於我在一個子組中運行該過程(即,如果我取出preexec_fn=os.setpgrp
,那麼它將正常工作)。我不明白的是,爲什麼會出現這種情況。特別是鑑於以下工作:
cmd = ["ssh", "-q", "[email protected]", "ls"]
p = sp.Popen(cmd, preexec_fn=os.setpgrp)
任何有識之士將不勝感激。
嘿瑞恩。感謝您的迴應。在「工作」示例中,我仍然使用poll,我只是替換了我正在執行的命令。對不起,如果那部分是混亂。所以我不認爲這是問題。我只是說,一個不同的命令正在工作。再次感謝。 – loganasherjones