process = subprocess.Popen(["python", "restruct.py", dch, photos_folder, project_folder, kmls_folder], stdout=subprocess.PIPE) for line in iter(process.stdout.readline, b''): yield line + b' -------- ' 这段代码中,判断yield输出的信息,如果是“结束”,则输出“end
时间: 2023-07-15 11:13:45 浏览: 180
可以在代码中添加一个判断语句,判断当前 yield 的字符串是否包含“结束”,如果包含则在输出前添加一个“end”字符串,可以像下面这样修改代码:
```
process = subprocess.Popen(["python", "restruct.py", dch, photos_folder, project_folder, kmls_folder], stdout=subprocess.PIPE)
for line in iter(process.stdout.readline, b''):
if "结束" in line.decode():
yield b"end " + line
else:
yield line + b' -------- '
```
这样就可以在输出的字符串前添加一个“end”字符串了。注意要使用`decode()`将`bytes`类型的字符串转换为`str`类型的字符串进行判断。
相关问题
process = subprocess.Popen(command, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
当你使用 `subprocess.Popen(command, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE)` 这样的构造函数时,你在Python中创建了一个新的子进程来执行给定的`command`,其中`shell=True`意味着命令会在操作系统壳环境中执行,而不是直接在Python解释器中。`stdout=subprocess.PIPE` 和 `stderr=subprocess.PIPE` 使得子进程的输出(标准输出和错误输出)被捕获到内存中,你可以随后读取这些数据。
例如:
```python
import subprocess
# 执行一个shell命令(这里是一个简单的echo)
command = "echo Hello, World!"
process = subprocess.Popen(command, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
output, error = process.communicate()
print(f"标准输出: {output.decode('utf-8')}")
print(f"错误输出: {error.decode('utf-8')}")
```
在这个示例中,`decode('utf-8')`是为了将字节转换成字符串以便查看。
def run(self): process = subprocess.Popen(['python', self.script_path], stdout=subprocess.PIPE, stderr=subprocess.STDOUT) while True: output = process.stdout.readline().decode().strip() if output == '' and process.poll() is not None: break if output: self.output_signal.emit(output)解释下该代码
这段代码是一个 Python 的多线程程序,其中包含一个运行函数 `run`。该函数会启动一个子进程运行指定的 Python 脚本(脚本路径为 `self.script_path`),并将子进程的标准输出和标准错误输出都重定向到 `subprocess.PIPE`,从而可以在主线程中通过 `process.stdout` 来获取子进程的输出。
在 `while` 循环中,通过 `process.stdout.readline()` 方法获取子进程的输出,并将其转换成字符串形式进行处理。如果读取到的输出为空字符串且子进程已经结束运行,就退出循环。如果读取到的输出非空,就通过 `self.output_signal.emit(output)` 发射一个自定义信号,将输出传递给主线程中的槽函数进行处理。这样就可以实现在子进程运行时将其输出实时显示到主界面的功能。
阅读全文