科技部空间

import concurrent.futures
import subprocess
import signal
import time

# 定义要执行的命令列表
commands = [
    ["ros2", "bag", "record"],
    ["other_command_1"],
    ["other_command_2"]
]

def execute_command(command):
    # 启动进程
    process = subprocess.Popen(command, stdout=subprocess.PIPE, stderr=subprocess.PIPE, text=True)
    
    try:
        # 等待一段时间(例如 10 秒)
        time.sleep(10)
    except KeyboardInterrupt:
        # 如果收到 KeyboardInterrupt(Ctrl+C),发送中断信号
        process.send_signal(signal.SIGINT)
        print(f"收到中断信号,正在终止进程 {command}...")

    # 等待进程结束
    process.wait()

    # 获取进程的标准输出和标准错误
    stdout, stderr = process.communicate()

    # 输出结果
    print(f"进程 {command} 标准输出:", stdout)
    print(f"进程 {command} 标准错误:", stderr)

# 使用 ThreadPoolExecutor 启动并发任务
with concurrent.futures.ThreadPoolExecutor() as executor:
    # 提交每个命令作为一个任务
    futures = [executor.submit(execute_command, command) for command in commands]

    try:
        # 等待任意一个任务完成
        completed, _ = concurrent.futures.wait(futures, return_when=concurrent.futures.FIRST_COMPLETED)

        # 在特定任务完成后,关闭 executor(类似于Ctrl+C的效果)
        if any(future in completed for future in futures):
            print("特定任务完成,正在关闭 executor...")
            executor.shutdown(wait=False)
    except KeyboardInterrupt:
        # 如果收到 KeyboardInterrupt(Ctrl+C),取消所有未完成的任务
        for future in futures:
            future.cancel()

# 你可以添加额外的清理逻辑,根据需要等待任务的完成等
 

import concurrent.futures
import subprocess
import signal
import time

# 定义要执行的命令列表
commands = [
    ["ros2", "bag", "record"],
    ["other_command_1"],
    ["other_command_2"]
]

def execute_command(command):
    # 启动进程
    process = subprocess.Popen(command, stdout=subprocess.PIPE, stderr=subprocess.PIPE, text=True)
    
    try:
        # 等待一段时间(例如 10 秒)
        time.sleep(10)
    except KeyboardInterrupt:
        # 如果收到 KeyboardInterrupt(Ctrl+C),发送中断信号
        process.send_signal(signal.SIGINT)
        print(f"收到中断信号,正在终止进程 {command}...")

    # 等待进程结束
    process.wait()

    # 获取进程的标准输出和标准错误
    stdout, stderr = process.communicate()

    # 输出结果
    print(f"进程 {command} 标准输出:", stdout)
    print(f"进程 {command} 标准错误:", stderr)

# 使用 ProcessPoolExecutor 启动并发任务
with concurrent.futures.ProcessPoolExecutor() as executor:
    # 提交每个命令作为一个任务
    futures = [executor.submit(execute_command, command) for command in commands]

    try:
        # 等待任意一个任务完成
        completed, _ = concurrent.futures.wait(futures, return_when=concurrent.futures.FIRST_COMPLETED)

        # 取消所有尚未完成的任务
        for future in futures:
            if future not in completed:
                future.cancel()
                print(f"任务 {future} 已取消")
    except KeyboardInterrupt:
        # 如果收到 KeyboardInterrupt(Ctrl+C),取消所有未完成的任务
        for future in futures:
            future.cancel()

# 你可以添加额外的清理逻辑,根据需要等待任务的完成等
 

import concurrent.futures
import subprocess
import signal
import time

# 定义要执行的命令列表
commands = [
    ["ros2", "bag", "record"],
    ["other_command_1"],
    ["other_command_2"]
]

def execute_command(command):
    # 启动进程
    process = subprocess.Popen(command, stdout=subprocess.PIPE, stderr=subprocess.PIPE, text=True)
    
    try:
        # 等待一段时间(例如 10 秒)
        time.sleep(10)
    except KeyboardInterrupt:
        # 如果收到 KeyboardInterrupt(Ctrl+C),发送中断信号
        process.send_signal(signal.SIGINT)
        print(f"收到中断信号,正在终止进程 {command}...")

    # 等待进程结束
    process.wait()

    # 获取进程的标准输出和标准错误
    stdout, stderr = process.communicate()

    # 输出结果
    print(f"进程 {command} 标准输出:", stdout)
    print(f"进程 {command} 标准错误:", stderr)

# 使用 ThreadPoolExecutor 启动并发任务
with concurrent.futures.ThreadPoolExecutor() as executor:
    # 提交每个命令作为一个任务
    futures = [executor.submit(execute_command, command) for command in commands]

    try:
        # 等待所有任务完成
        concurrent.futures.wait(futures, timeout=concurrent.futures.ALL_COMPLETED)
    except KeyboardInterrupt:
        # 如果收到 KeyboardInterrupt(Ctrl+C),取消所有未完成的任务
        for future in futures:
            future.cancel()

# 你可以添加额外的清理逻辑,根据需要等待任务的完成等
 

import subprocess
import signal
import time

# 定义要执行的命令列表
commands = [
    ["ros2", "bag", "record"],
    ["other_command_1"],
    ["other_command_2"]
]

# 启动进程
processes = [subprocess.Popen(command, stdout=subprocess.PIPE, stderr=subprocess.PIPE, text=True) for command in commands]

try:
    # 等待一段时间(例如 10 秒)
    time.sleep(10)
except KeyboardInterrupt:
    # 如果收到 KeyboardInterrupt(Ctrl+C),发送中断信号给所有进程
    for process in processes:
        process.send_signal(signal.SIGINT)
    print("收到中断信号,正在终止进程...")

# 等待所有进程结束
for process in processes:
    process.wait()

# 获取所有进程的标准输出和标准错误
outputs = [process.communicate() for process in processes]

# 输出结果
for i, (stdout, stderr) in enumerate(outputs):
    print(f"进程 {i + 1} 标准输出:", stdout)
    print(f"进程 {i + 1} 标准错误:", stderr)
 

import subprocess
import time
import signal

# 要执行的命令和参数
ros2_command = ["ros2", "bag", "record"]

# 使用 Popen 启动进程
process = subprocess.Popen(ros2_command, stdout=subprocess.PIPE, stderr=subprocess.PIPE, text=True)

try:
    # 等待一段时间(例如 10 秒)
    time.sleep(10)
except KeyboardInterrupt:
    # 如果收到 KeyboardInterrupt(Ctrl+C),发送中断信号
    process.send_signal(signal.SIGINT)
    print("收到中断信号,正在终止进程...")

# 等待进程结束
process.wait()

# 获取进程的标准输出和标准错误
stdout, stderr = process.communicate()

# 输出结果
print("标准输出:", stdout)
print("标准错误:", stderr)
 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值