我正在编写一个运行以下内容的python程序:
import subprocess
import time
def fun1():
terminal1 = ['gnome-terminal']
terminal1.extend(['-x', 'sh', '-c', '"roscore"'])
pid = subprocess.Popen(terminal1, stdout=subprocess.PIPE)
time.sleep(3)
print "success1"
fun2()
def fun2():
terminal2 = ['gnome-terminal']
terminal2.extend(['-x', 'sh', '-c', '"rosrun rosserial_python serial_node.py /dev/ttyACM0"' ])
pid2 = subprocess.Popen(terminal2, stdout=subprocess.PIPE)
print "success2"
fun1()
fun1工作正常,我等了3秒,因为它持续了一段时间,直到一切都完成,所以fun2可以工作(我不能同时启动两个,fun2必须等待fun1,这在fun2之前永远不会结束)
运行fun2时出现问题,我不知道错误在哪里,是与fun1中的“相同”代码,但是gnome-terminal只出现了几毫秒然后就消失了......
任何建议??
提前谢谢
答案 0 :(得分:0)
问题可能出在"
上。将params列表传递给子进程时,不需要使用它们。在运行之前它将被正确转义。
窗口正在关闭,因为生成的命令可能格式错误,因此会生成错误并立即退出。
因此,如果您要运行文字命令,则可以使用shlex.split生成适当的列表以传递给子进程。通常,您只需要担心引号和转义字符。因此,要将空格作为参数传递,只需写一个空格。