如果stdout中没有数据,子进程的 stdout.readline()语句卡住.如何打破这个循环?



我正试图从subprocessstdout中获取readline。有时设备"123"不响应,不提供stdout中的数据。在这种情况下,out = proc.stdout.readline()永远卡住了。如果设备没有响应,如何跳出循环。

我正在尝试读取子进程的stdout。代码如下:

cmd = ["node", "transformerMonitor.js", "-h", "sample.com", "-s", "123"]
proc = subprocess.Popen(cmd, stdout=subprocess.PIPE, text=True)
time_out = 120
start_time = time.time()
while time.time() - start_time < time_out:
out = proc.stdout.readline()
print(out)

如果设备没有响应。out = proc.stdout.readline()永远被卡住了。如果没有响应,如何中断循环。

一旦子进程完成/失败并且没有来自设备的更多响应,out将是一个空字符串。我们可以利用这个事实跳出循环。

代码:

import subprocess
import time
cmd = ["node", "transformerMonitor.js", "-h", "sample.com", "-s", "123"]
proc = subprocess.Popen(cmd, stdout=subprocess.PIPE, text=True)
time_out = 120
start_time = time.time()
while time.time() - start_time < time_out:
out = proc.stdout.readline()
# If empty string output (No Response from Device), break out of loop.
if not out:
break
print('Code Finished')

输出:

node:internal/modules/cjs/loader:998
throw err;
^
Error: Cannot find module 'C:UserssaptaDocumentstestingtransformerMonitor.js'
at Module._resolveFilename (node:internal/modules/cjs/loader:995:15)
at Module._load (node:internal/modules/cjs/loader:841:27)
at Function.executeUserEntryPoint [as runMain] (node:internal/modules/run_main:81:12)        
at node:internal/main/run_main_module:23:47 {
code: 'MODULE_NOT_FOUND',
requireStack: []
}
Node.js v18.12.1
Code Finished

最新更新