我有以下代码
c = open("text.txt", 'a')
output = subprocess.Popen('ping -t 127.0.0.1', stdout=subprocess.PIPE).communicate()[0]
c.write(str(output))
但是由于ping是无限的,代码卡在第二行,直到我关闭cmd
如何关闭无限子流程
我使用python 2
答案 0 :(得分:3)
您可以使用-n参数(在linux中)进行ping以设置有限数量的ping信号:
process = subprocess.Popen('ping -n 1 127.0.0.1', shell=True, stdout=subprocess.PIPE)
output = process.communicate()[0]
with open("text.txt", 'a') as f:
f.write(str(output))
或仅读取第一行:
process = subprocess.Popen('ping 127.0.0.1', shell=True, stdout=subprocess.PIPE, universal_newlines=True)
output = process.stdout.readline()
process.stdout.close()
process.kill()
with open("text.txt", 'a') as f:
f.write(str(output))
答案 1 :(得分:1)
或者,您可以使用check_output
并添加timeout
:
from subprocess import check_output
output = check_output('ping -t 127.0.0.1', timeout=seconds)
答案 2 :(得分:0)
process = subprocess.Popen('ping -t 127.0.0.1', stdout=subprocess.PIPE)
time.sleep(10)
process.kill()
output=process.stdout.read()
使用此代码,子进程运行并且数据将被赋予stdout,
我们不需要使用沟通
当你想要停止这个过程时,
使用process.kill()
使用stdout.read()
获取数据