退出python子进程中的无限进程

时间:2017-07-08 12:10:44

标签: python python-2.7 subprocess infinite

我有以下代码

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

3 个答案:

答案 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()

获取数据