相关疑难解决方法(0)

使用模块'subprocess'和超时

这是运行任意命令返回其stdout数据的Python代码,或者在非零退出代码上引发异常:

proc = subprocess.Popen(
    cmd,
    stderr=subprocess.STDOUT,  # Merge stdout and stderr
    stdout=subprocess.PIPE,
    shell=True)
Run Code Online (Sandbox Code Playgroud)

communicate 用于等待进程退出:

stdoutdata, stderrdata = proc.communicate()
Run Code Online (Sandbox Code Playgroud)

subprocess模块不支持超时 - 能够终止运行超过X秒的进程 - 因此,communicate可能需要永久运行.

在旨在在Windows和Linux上运行的Python程序中实现超时的最简单方法是什么?

python multithreading subprocess timeout

303
推荐指数
15
解决办法
26万
查看次数

停止在Python中读取进程输出而不挂起?

我有一个Linux的Python程序几乎看起来像这样:

import os
import time

process = os.popen("top").readlines()

time.sleep(1)

os.popen("killall top")

print process
Run Code Online (Sandbox Code Playgroud)

该程序挂起在这一行:

process = os.popen("top").readlines()
Run Code Online (Sandbox Code Playgroud)

这种情况发生在保持更新输出的工具中,如"Top"

我最好的考验:

import os
import time
import subprocess

process = subprocess.Popen('top')

time.sleep(2)

os.popen("killall top")

print process
Run Code Online (Sandbox Code Playgroud)

它比第一个(它被砍掉)效果更好,但它返回:

<subprocess.Popen object at 0x97a50cc>
Run Code Online (Sandbox Code Playgroud)

第二次试验:

import os
import time
import subprocess

process = subprocess.Popen('top').readlines()

time.sleep(2)

os.popen("killall top")

print process
Run Code Online (Sandbox Code Playgroud)

和第一个一样.它由于"readlines()"而被绞死

它的返回应该是这样的:

top - 05:31:15 up 12:12,  5 users,  load average: 0.25, 0.14, 0.11
Tasks: 174 total,   2 running, 172 sleeping,   0 stopped,   0 zombie
Cpu(s):  9.3%us, …
Run Code Online (Sandbox Code Playgroud)

python subprocess hung multiprocessor

14
推荐指数
1
解决办法
8684
查看次数