Inc*_*tic 3 python subprocess python-3.x
我用来subprocess.run运行命令并捕获输出,如下所示:
proc = subprocess.run([commandAndFlags], capture_output=True)
if proc.stdout:
print('stdout:', str(proc.stdout))
if proc.stderr:
print('stderr:', str(proc.stderr))
Run Code Online (Sandbox Code Playgroud)
我想添加一个超时,但仍然捕获超时之前发送到 stdout/stderr 的任何输出。
但是,如果我简单地添加超时并将其包装在 try/ except 中,我将无法捕获子进程输出。
try:
proc = subprocess.run([commandAndFlags], capture_output=True, timeout=2000)
except subprocess.TimeoutExpired:
print('Timeout!!')
if proc.stdout:
print('stdout:', str(proc.stdout))
if proc.stderr:
print('stderr:', str(proc.stderr))
Run Code Online (Sandbox Code Playgroud)
当我尝试打印 stdout/stderr 时,现在proc未定义。
如何设置超时但仍捕获超时之前打印的任何输出?
您仍然可以使用capture_output原始代码中的属性,并且当TimeoutExpired引发异常时,您可以从那里收集stdout和。stderr例如:
try:
proc = subprocess.run([commandAndFlags], capture_output=True, text=True, timeout=2000)
outs = proc.stdout
errs = proc.stderr
except subprocess.TimeoutExpired as timeErr:
outs = timeErr.stdout
errs = timeErr.stderr
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1261 次 |
| 最近记录: |