python - 在同一程序实例中执行新命令之前,有没有办法等待命令执行
问题描述
我正在读出机器的运行时信息。我的问题是,在我成功连接到机器之后,并且在执行读取运行时数据的命令之前,子流程实例已关闭。
我已经在一行中编写了两个命令:
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:\>
解决方案
如果我做对了,你需要[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
)。
推荐阅读
- android - Cordova ionic 1 Visual Studio 构建失败
- javascript - 从
使用 javascript 和 puppeteer - unity3d - 禁用 Unity 2D 对象的碰撞
- c++ - 在线程之间共享 udp 套接字
- windows - 如何修复真正的 vnc 查看器中的黑屏问题?
- python - 在python中使用带有or的if语句时为什么会忽略条件
- mongodb - Mongoose Geo Near Search - 如何在给定距离内排序?
- rust - Rust:在`impl std::future::Future`中找不到方法“poll”
- html - 按下删除按钮后,我的购物车没有删除物品
- jenkins - 无法在“通过 SSH 发送文件或执行命令”上执行 sudo 命令