【发布时间】:2014-07-20 04:27:58
【问题描述】:
我有一个 Python 程序,它接受套接字上的连接,读取命令,然后在某些情况下在关闭套接字之前启动后台子进程。
问题是,在子进程运行时,我似乎无法真正关闭套接字。
conn, addr = socket.accept()
...
p = Popen([cmd,user], stdin=PIPE)
print "debug1"
# the following call doesn't even return until sub-process is exited
#p.communicate(input=text)[0]
p.stdin.write(text)
print "debug2"
conn.close()
我看到“debug2”立即打印出来,但在客户端,连接不会关闭,直到子进程终止。如果子进程需要一段时间才能完成,这是一个问题,因为连接应该立即终止。
更新:我刚刚读到“运行后台进程的关键不是创建取决于进程结果的操作。”我不依赖于过程的结果,但我确实需要发送到它的标准输入。但是,如果我删除对p.stdin.write 的调用,套接字仍然被阻塞。但是,如果我没有将Popen 的返回值分配给任何东西,它不会 阻塞。但是如果我不分配返回值,我就无法写入标准输入。
【问题讨论】:
标签: python sockets subprocess