这是运行任意命令返回其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程序中实现超时的最简单方法是什么?
我有一个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) 我需要创建一个从用户获取以下内容的脚本:
1)进程名称(在linux上).
2)此进程写入的日志文件名.
它需要终止进程并验证进程是否已关闭.使用时间和日期将日志文件名更改为新文件名.然后再次运行该过程,验证它是否正常,以便它将继续写入日志文件.
在此先感谢您的帮助.
首先,我想说我刚开始学习python,我想在我的python脚本中执行maven命令(见下面的部分代码)
os.system("mvn surefire:test")
但不幸的是,有时这个命令会超时,所以我想知道如何设置一个超时阈值来控制这个命令。
也就是说,如果执行时间超过 X 秒,程序将跳过命令。
更重要的是,其他有用的解决方案可以解决我的问题吗?提前致谢!
python ×3
subprocess ×2
timeout ×2
hung ×1
kill ×1
linux ×1
os.system ×1
process ×1
python-3.x ×1