0

私は以下を実行する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 は正常に動作します。fun2 が機能するようにすべてが完了するまでしばらく続くため、3 秒待ちます (両方を同時に起動することはできません。fun2 は fun1 を待機する必要があり、fun2 の前に終了することはありません)。

問題はfun2の実行時に発生します。どこが間違っているのかわかりません。fun1と同じコードですが、gnome-terminalが数ミリ秒間表示されてから消えます...

なにか提案を??

前もって感謝します

4

1 に答える 1

0

問題はおそらく". パラメータのリストをサブプロセスに渡すときは、これらを使用する必要はありません。実行される前に適切にエスケープされます。

生成されたコマンドの形式が正しくない可能性があり、エラーが生成されてすぐに終了するため、ウィンドウが閉じられます。

したがって、実行したいリテラル コマンドがある場合は、shlex.splitを使用して、サブプロセスに渡す適切なリストを生成できます。通常、引用符やエスケープ文字について心配する必要はありません。したがって、スペースを引数として渡すには、スペースを記述します。

于 2013-05-03T09:48:49.387 に答える