Как запустить и передать ввод во внешнюю программу

Я использую Python для выполнения внешней программы. И я также хотел бы, чтобы Python отправлял несколько нажатий клавиш вызываемой программе для завершения автоматического входа в систему.

Проблема в том, что когда я использовал subprocess.call () для выполнения внешней программы, программа получила системный фокус, и скрипт Python не смог ответить, пока я не закрыл внешнюю программу.

Ребята, у вас есть предложения по этому поводу? Большое спасибо.

Ответы на вопрос(1)

Решение Вопроса

использованиеsubprocess.Popen() вместо.call()

СPopen Вы также можете контролироватьstdin, stdout а такжеstderr дескрипторы файлов, так что вы можете взаимодействовать с внешней программой.

Глупый пример:

s = subprocess.Popen(command, stdout=subprocess.PIPE, 
                     stderr=subprocess.PIPE) # The script is not blocked here

# Wait to finish
while s.poll() is None: # poll() checks if process has finished without blocking
    time.sleep(1)
    ... # do something

# Another way to wait
s.wait() # This is blocking

if s.returncode == 0:
    print "Everything OK!"
else:
    print "Oh, it was an error"

Некоторые полезные методы:

Popen.poll() Check if child process has terminated. Set and return returncode attribute.

Popen.wait() Wait for child process to terminate. Set and return returncode attribute.

Popen.communicate(input=None) Interact with process: Send data to stdin. Read data from stdout and stderr, until end-of-file is reached. Wait for process to terminate. The optional input argument should be a string to be sent to the child process, or None, if no data should be sent to the child.

Много больше информациив документах

Ваш ответ на вопрос