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

Exiting an infinite process in python subprocess

我有以下代码

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

如何关闭无限子进程

i use python 2

您可以使用 -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))

或者您可以使用 check_output 并添加 timeout:

from subprocess import check_output

output = check_output('ping -t 127.0.0.1', timeout=seconds)
process = subprocess.Popen('ping -t 127.0.0.1', stdout=subprocess.PIPE)
time.sleep(10)
process.kill()
output=process.stdout.read()

使用此代码,子进程运行并且数据将被提供标准输出,

我们不需要使用通信

当您想停止进程时,

使用process.kill()

并使用 stdout.read()

获取数据