我有一个问题,我需要编写一个python脚本,它基本上打开一个终端窗口并在其中启动一个节点js服务器,然后打开另一个终端窗口并在其中启动一个java程序。
如果我运行两个subprocess.call()函数,它们在同一个终端窗口中运行。
我有办法做到这一点吗?
感谢:。)
答案 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"])