从python脚本从多个终端窗口运行多个命令

时间:2017-08-05 09:54:21

标签: python shell unix terminal

我有一个问题,我需要编写一个python脚本,它基本上打开一个终端窗口并在其中启动一个节点js服务器,然后打开另一个终端窗口并在其中启动一个java程序。

如果我运行两个subprocess.call()函数,它们在同一个终端窗口中运行。

我有办法做到这一点吗?

感谢:。)

1 个答案:

答案 0 :(得分:0)

使用subprocess.Popen:

这将为每个bot创建一个新窗口并在其中运行程序。 python3的-i选项是在TestBot3.py脚本完成后使窗口交互。

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout android:layout_height="match_parent"
    android:layout_width="match_parent"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:orientation="vertical"
    android:weightSum="7"
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools">

    <TextView
        android:id="@+id/textView3"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1"        android:text="of"
        android:textSize="24sp"
        tools:layout_editor_absoluteX="181dp"
        tools:layout_editor_absoluteY="255dp" />

    <TextView
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1"        android:text="%"
        android:textSize="24sp"
        tools:layout_editor_absoluteX="300dp"
        tools:layout_editor_absoluteY="207dp" />

    <EditText
        android:id="@+id/numberTxt"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1"        android:ems="10"
        android:hint="Enter Number"
        android:inputType="numberDecimal"
        android:textAlignment="center"
        tools:layout_editor_absoluteX="85dp"
        tools:layout_editor_absoluteY="296dp" />

    <TextView
        android:id="@+id/totalTextView"
        android:layout_width="0dp"
        android:layout_height="0dp"
        android:layout_weight="1"        android:text="0"
        android:textAlignment="center"
        android:textSize="36sp"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintVertical_bias="0.101" />

    <TextView
        android:id="@+id/textView"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1"        android:text="What is"
        android:textSize="24sp"
        tools:layout_editor_absoluteX="152dp"
        tools:layout_editor_absoluteY="129dp" />

    <EditText
        android:id="@+id/percentageTxt"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1"        android:ems="10"
        android:hint="Enter Percentage"
        android:inputType="numberDecimal"
        android:textAlignment="center"

        tools:layout_editor_absoluteX="85dp"
        tools:layout_editor_absoluteY="193dp" />

    <Button
        android:id="@+id/calcBtn"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1"

        android:text="CALCULATE"
        tools:layout_editor_absoluteX="147dp"
        tools:layout_editor_absoluteY="374dp" />

</LinearLayout>

或者您可以使用from subprocess import Popen, PIPE bot1 = Popen(["lxterminal", "-e", "python3", "-i", "TestBot1.py"], stdout=PIPE, stderr=PIPE, stdin=PIPE) bot2 = Popen(["lxterminal", "-e", "python3", "-i", "TestBot2.py"], stdout=PIPE, stderr=PIPE, stdin=PIPE) bot3 = Popen(["lxterminal", "-e", "python3", "-i", "TestBot3.py"], stdout=PIPE, stderr=PIPE, stdin=PIPE)

from subprocess import call

要为每个人打开终端,你可以使用带有-e的gnome-terminal在终端内执行此选项的参数:

call(["python3", "TestBot1.py"])
call(["python3", "TestBot2.py"])
call(["python3", "TestBot3.py"])