从python在多个运行进程中运行命令行

从python在多个运行进程中运行命令行,python,command-line,tcl,Python,Command Line,Tcl,我不确定我想做的是否可能,但是: 我有一个python脚本(我们称之为PY),它调用一个批处理脚本以在终端模式下启动一个工具(我们称之为a)。此工具将获得一个启动脚本(tcl脚本),该脚本将设置其环境并启动第二个工具(我们称之为B)。这两个工具在本地通过TCP连接进行通信 我的问题是,在这两个程序(A和B)运行的情况下,我可以切换回python脚本在A或B的TCL接口中运行命令吗 脚本看起来有点像这样: #python PY def ReadConigAndSetup(): #read

我不确定我想做的是否可能,但是:

我有一个python脚本(我们称之为PY),它调用一个批处理脚本以在终端模式下启动一个工具(我们称之为a)。此工具将获得一个启动脚本(tcl脚本),该脚本将设置其环境并启动第二个工具(我们称之为B)。这两个工具在本地通过TCP连接进行通信

我的问题是,在这两个程序(A和B)运行的情况下,我可以切换回python脚本在A或B的TCL接口中运行命令吗

脚本看起来有点像这样:

#python PY
def ReadConigAndSetup():
    #read some data
    ...
    #run bat
    subprocess.run("./some_bat.bat some_data_args")




程序B运行后,我希望能够从python中运行程序B中的更多命令,因为在python环境中解析一些配置文件要容易得多。

答案是“这取决于细节”

原则上没有理由认为被调用的程序不能以这种方式正常工作,前提是子流程放弃了控制权(可能会放弃,也可能不会放弃),但是通过BAT文件启动复杂程序增加了一层额外的复杂性,因此您可能想考虑是否可以简化一点

如果运行Tcl代码的程序没有终止,事情就会变得更加棘手。这是一个细节至关重要的领域;Tcl代码可以被写成无限循环——这是一种编程语言,因此如果你坚持的话,它当然会被告知是令人讨厌的——并且被控制的程序也可以自行决定无限循环,这在GUI应用程序中尤其可能发生,因为循环是用户与GUI交互的地方。在Windows上,许多GUI应用程序在与终端断开连接的情况下运行(是否这样做是一个编译时选项),等待它们完成可能非常烦人


可以使用一次运行多个子流程。如果你这样做,要非常小心。有可能陷入死锁(尽管这在很大程度上取决于子流程正在做什么)。只从自己的线程启动每个子流程可能更容易……但这样处理线程也是很复杂的。

与正在运行的子流程交互完全取决于这些子流程的工作方式,并且非常复杂,根本没有通用规则。你需要把范围缩小很多才能得到一个有用的答案…是的,有bat文件很烦人,但是没有它我就无法启动。至于保持两个进程都处于活动状态,A需要处于活动状态才能通过TCP连接与B通信,而B需要进行一些设置等。一旦B完成,这两个进程都可能被终止。那么,是否可以将python脚本“指向”正在运行的进程A和进程B?您提到在他们自己的线程上启动它们,是否有一些资源可以研究如何以这种方式实现和与它们交互?
 #bat start program A and pass it a startup script
  some_program_A -mode tcl -source ./some_source.tcl
#tcl some_source.tcl
setup environment

open TCP port
start program B
#program B setup tcl
some more setup