首页 > 解决方案 > 在同一程序实例中执行新命令之前,有没有办法等待命令执行

问题描述

我正在读出机器的运行时信息。我的问题是,在我成功连接到机器之后,并且在执行读取运行时数据的命令之前,子流程实例已关闭。

我已经在一行中编写了两个命令:

    constr =    [program, "connect", "-I", "192.168.0.75", "runinfo", "T", "R"]

导致在关闭 shell 之前只建立了连接。

我用一个字符串中的代码进行了尝试:

    constr =    [program, "connect -I  "192.168.0.75" "runinfo" "T" "R"]

导致外壳保持打开状态,但根本没有连接或做任何事情。

我还尝试使用分隔符分隔这两个命令,例如:

    |    &   ;

没有任何成功。

我现在的代码:

import subprocess

#Path to the programm
program = "../../../../Program Files (x86)/HEIDENHAIN/TNCremo/TNCcmdPlus.exe"

#command to connect
constr =    [program, "connect", "-I", "192.168.0.75"]

# command to read the runtime
getstr  =    ["runinfo", "T", "R"]

# execute subprocess
subprocess.Popen(constr, shell=False)

如您所见,我现在根本不使用第二个命令。因为我到目前为止还没有成功。

我很想得到同样的结果,就像使用 TNCcmdPlus.exe shell 时一样。

Local:C:\Users\****\Desktop> connect -I 192.168.0.75
Serial cable (P), Ethernet (I) or Local (L): —l
Serial port (e.g. COM2): 192.168.0.75
Connecting with 192.168.0.75...‚ 0 Band
Connection established with iTNC530. NC Software 340422 14 SP5
TNC:\> runinfo I R
Info type: T
Nc up eine (N). Machine up time (M), Machine running tine (R) or
PLC operation times (0..1) : R
Machine running time: 49404289 sec (571 days 19 h 24 min 40 sec)
TNC:\> 

标签: pythonwindowssubprocesswait

解决方案


如果我做对了,你需要[Python 3]:Popen。通信input=None, timeout=None(或Popen.wait),为了等待一个进程终止,然后再生成另一个进程,例如:

# ...
# execute subprocess

p = subprocess.Popen(constr)
p.communicate()
p = subprocess.Popen(getstr)
p.communicate()

请注意,您还可以使用其中一种便利功能(例如subprocess.check_output)。


推荐阅读