0

我有一个通过以下命令在终端中执行的应用程序:

rosbag record -O /home/user/some_address/file /topic

file.bag.active在上面的地址中做了一个,基本上在里面记录了一些信息。

一段时间后,通过在终端中按 ctrl+cfile.bag.active更改,file.bag并将准备好被另一个应用程序读取。

然而,我想通过一个 python 脚本完成这个序列,最好的方法似乎是执行以下操作:

import subprocess, shlex

command = "rosbag record -O /home/user/some_address/file /topic"
command = shlex.split(command)
self.proc = subprocess.Popen(command)

用于表示 ctrl+c 函数的脚本的另一部分是:

self.proc.send_signal(subprocess.signal.SIGINT)

但是,在这种情况下,file.bag.active文件不会更改为file.bag,我不确定我还能做什么或添加到此代码中。

另外我注意到的是,如果我添加一个 pdb.set_trace() 并在调用它时在其中按 ctrl+c,我会得到我要查找的结果,我无法解释为什么或如何在自动码。

有谁知道它的解决方法?

4

1 回答 1

0

在这里得到了答案,那就是:

import subprocess, shlex, psutil
command = "rosbag record -O subset /camera/depth/image_raw /camera/rgb/image_raw /joy /mobile_base/sensors/imu_data_raw"
command = shlex.split(command)
rosbag_proc = subprocess.Popen(command)

对于 ctrl+c 功能:

for proc in psutil.process_iter():
    if "record" in proc.name() and set(command[2:]).issubset(proc.cmdline()):
        proc.send_signal(subprocess.signal.SIGINT)

rosbag_proc.send_signal(subprocess.signal.SIGINT)
于 2020-12-17T14:11:38.907 回答