Есть ли способ ожидания выполнения команды перед выполнением новой команды в том же экземпляре программы? - PullRequest
1 голос
/ 27 марта 2019

Я читаю информацию о времени выполнения машин.Моя проблема в том, что экземпляр подпроцесса закрывается после того, как я успешно подключился к машине, и перед выполнением моей команды для чтения данных времени выполнения.

Я уже написал обе команды в одной строке:

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

В результате было установлено только соединение до закрытия оболочки.

Я попробовал это с кодом в одной строке:

    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.

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:\> 

1 Ответ

0 голосов
/ 27 марта 2019

Если я все правильно понял, вам нужно [Python 3]: Popen. общаться ( ввод = нет, тайм-аут = нет ) (или Popen.wait), чтобы дождаться завершения процесса, прежде чем запустить другой, что-то вроде:

# ...
# execute subprocess

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

В качестве примечания вы также можете использовать одну из вспомогательных функций (например, subprocess.check_output).

...