退出 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()
获取数据
我有以下代码
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()
获取数据