相关疑难解决方法(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万
查看次数

如何终止使用shell = True启动的python子进程

我正在使用以下命令启动子进程:

p = subprocess.Popen(cmd, stdout=subprocess.PIPE, shell=True)
Run Code Online (Sandbox Code Playgroud)

但是,当我尝试使用时杀死:

p.terminate()
Run Code Online (Sandbox Code Playgroud)

要么

p.kill()
Run Code Online (Sandbox Code Playgroud)

该命令在后台继续运行,所以我想知道如何实际终止该进程.

请注意,当我运行命令时:

p = subprocess.Popen(cmd.split(), stdout=subprocess.PIPE)
Run Code Online (Sandbox Code Playgroud)

它在发出时会成功终止p.terminate().

python linux subprocess kill-process

285
推荐指数
7
解决办法
26万
查看次数

Python子进程.check_call vs .check_output

我的python脚本(python 3.4.3)通过子进程调用bash脚本:

import subprocess as sp
res = sp.check_output("bashscript", shell=True)
Run Code Online (Sandbox Code Playgroud)

bashscript包含以下行:

ssh -MNf somehost
Run Code Online (Sandbox Code Playgroud)

这将打开与某个远程主机的共享主连接,以允许一些后续操作.

执行python脚本时,它将提示该ssh行的密码,但在输入密码后它会阻塞,并且永远不会返回.当我按ctrl-C终止脚本时,我看到连接已正确建立(因此ssh行已成功执行).

使用时,我没有这个阻塞问题check_call,而不是check_output,但check_call不检索标准输出.我想了解究竟是什么导致阻塞行为check_output,可能与某些微妙的相关ssh -MNf.

python ssh bash subprocess

17
推荐指数
1
解决办法
2万
查看次数

标签 统计

python ×3

subprocess ×3

bash ×1

kill-process ×1

linux ×1

multithreading ×1

ssh ×1

timeout ×1