Python OS с модулем PyautoGUi - PullRequest
0 голосов
/ 10 мая 2018

Я не могу заставить python напечатать "Hello world!" в окне «Блокнот» при запуске через ОС или подпроцесс. "Привет, мир!" печатается только после закрытия окна блокнота, с чего бы это?

Код ниже:

import os
import pyautogui

os.system('"C:\\Windows\\System32\\notepad.exe"')
pyautogui.typewrite('Hello world!')

1 Ответ

0 голосов
/ 07 августа 2019

Хотя вы можете запустить блокнот из командной строки и затем вернуть курсор назад, os.system или даже subprocess.run не работают таким образом на Python.Каждый ожидает, пока ID процесса, связанный с вашей командой, не будет уничтожен.

Однако этот код будет работать:

import subprocess
subprocess.Popen('"C:\\Windows\\System32\\notepad.exe"')
# we want to give notepad time to appear.
time.sleep(1)
pyautogui.typewrite("Hello world!")
exit()

Может быть более точная команда, чем time.sleep (), чтобы ждатьчтобы появился Блокнот, похожий на WinWaitActive в AutoIt, и мне было бы интересно услышать это.Но вышеприведенное должно работать.

Возможный обходной путь может состоять в том, чтобы создать и затем запустить новый файл в Notepad ++ из командной строки, или просто запустить уже открытый экземпляр Notepad ++ и заставить pyautogui отправить ctrl-n.Я могу выполнить несколько вызовов os.system в других сценариях при открытии текстовых файлов в notepad ++, поскольку процесс завершается, когда он находит открытую версию notepad ++ для открытия текстового файла.

echo > my_new_file.txt
os.system("my_new_file.txt")

os.system здесь отключается после запуска файла, предполагая, что Notepad ++ уже открыт.

...