【问题标题】:Exiting an infinite process in python subprocess退出python子进程中的无限进程
【发布时间】:2017-12-12 15:45:03
【问题描述】:

我有以下代码

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

【问题讨论】:

  • 我正在使用 python 2
  • 我找到了解决方案,谢谢@Saypy
  • process = subprocess.Popen('ping -t 127.0.0.1', stdout=subprocess.PIPE) time.sleep(10) process.kill() output=process.stdout.read()

标签: python python-2.7 subprocess infinite


【解决方案1】:

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

【讨论】:

  • process = subprocess.Popen('ping -t 127.0.0.1', stdout=subprocess.PIPE) output=process.communicate()[0] process.kill() 代码仍然卡住
  • 不起作用! 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() print(输出)什么都不打印
  • 我只需要无限 ping
  • 我使用 python2 版本而不是 3
【解决方案2】:

您也可以使用check_output 并添加timeout

from subprocess import check_output

output = check_output('ping -t 127.0.0.1', timeout=seconds)

【讨论】:

    【解决方案3】:
    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() 获取数据

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-09-11
      • 1970-01-01
      • 2010-09-21
      • 2012-02-15
      • 2017-08-05
      • 2011-02-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多