我知道这是一个经常被问到的问题,我尝试过任何解决方法,我可以在这里和其他网站找到^但无法解决我的问题。 我的困境如下(在Windows上):
我有一个主脚本(main.py),我通过Popen调用另一个脚本(sniffer.py)创建一个子进程。之后我在main.py中做了一些事情,最后想要在子进程中发送一个字符来完成sniffer.py中的无限循环,最后是整个子进程。
main.py
process = Popen(["python", "sniffer.py", receiverIP, senderIP, "udp", path],stdin=PIPE)
#do some stuff
process.communicate('terminate')
sniffer.py
def check(done):
while True:
if sys.stdin.read() == 'terminate':
done = True
break
def sniff(someparams):
done = False
input_thread = threading.Thread(target=check, args=(done,))
input_thread.daemon = True
input_thread.start()
while True:
#do some stuff
if done:
break
我也尝试将通信调用与stdin.write结合起来,但它没有效果。
注意:我注意到,在我的communication()调用之后,sniffer.py中的while循环没有继续(整个脚本只是挂起)
答案 0 :(得分:2)
与@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View v = super.onCreateView(inflater, container, savedInstanceState);
ViewGroup vg = (ViewGroup) v.findViewById(R.id.fragment_holder)
inflater.inflate(R.layout.fragment_lans, vg, true);
MyFragment.ApiCallJob apicalljob = new MyFragment.ApiCallJob();
showLoader();
apicalljob.execute("a string");
return v;
}
没有任何关系。
您在本地将subprocess
更改为done
。您必须全局定义它才能正确退出。
True