これがなぜ掛かっているのかを正確に理解できません。私は、この例をコアコンポーネントに取り上げました。私はファイルを持って、私はこのコマンドを実行した場合のそれdo_ls.py
別個のプロセスグループでFabricコマンドを実行している場合
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
それが正しく実行されます。今問題がある。私はそれを自分のプロセスで実行したいと思います。私はこのファイルを持っているので、私は永遠にハングしますpython main.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()
を呼びましょう。問題は、私が知っている限り、サブグループ内でプロセスを実行しているということです(つまり、preexec_fn=os.setpgrp
を取り出すと正しく動作します)。私が理解できないことは、なぜこれが当てはまるのでしょうか?特に次のようなことがあるとすれば、
cmd = ["ssh", "-q", "[email protected]", "ls"]
p = sp.Popen(cmd, preexec_fn=os.setpgrp)
いずれの洞察も高く評価されます。
Hey Ryan。応答していただきありがとうございます。私はまだ「働いている」例で投票を使用していますが、私は実行していたコマンドを単に置き換えました。申し訳ありませんが、その部分が混乱していた場合。だから私はこれが問題だとは思わない。私は、単に別のコマンドが働いていたと言っていました。再度、感謝します。 – loganasherjones