2017-07-08 63 views
1

我有以下代码退出无限过程蟒子

c = open("text.txt", 'a')  

output = subprocess.Popen('ping -t 127.0.0.1', stdout=subprocess.PIPE).communicate()[0] 

c.write(str(output)) 

但随着平是无限的,在两个行代码stucks直到我关闭CMD

如何关闭无限子

我使用Python 2

+0

我正在使用python 2 –

+0

我发现解决方案谢谢@Saypy –

+0

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

回答

2

你可以使用-n参数(在Linux),中国平安设置查验信号的数量有限:

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)) 
+0

process = subprocess.Popen('ping -t 127.0.0.1',stdout = subprocess.PIPE) output = process.communicate()[0] process.kill()still代码卡住 –

+0

我更新了我的答案。 – SayPy

+0

不起作用! 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 ()打印(输出)什么都不打印 –

1

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

from subprocess import check_output 

output = check_output('ping -t 127.0.0.1', timeout=seconds) 
0
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()