Мне нужно войти в систему IBM i с помощью Python, не вводя имя пользователя и пароль вручную.
Я использовал библиотеку py3270, но она не может обнаружить эмулятор wc3270. Эмулятор, который я использую, имеет расширение .hod и открывается с помощью IBM i Launcher. Кто-нибудь может мне с этим помочь? какое может быть возможное решение для этого?
@Techie Имейте в виду, что, хотя IBM i поддерживает соединения 3270, собственный способ связи с терминалом - 5250.
Что вы планируете делать с Python после входа в систему? (Я спрашиваю это, потому что в вашем вопросе недостаточно информации, чтобы я действительно был уверен в том, что вы спрашиваете.)
Вопрос имеет тег websphere. Как Websphere вписывается в этот вопрос? Я хочу сказать, что, вообще говоря, Websphere представляет собой веб-интерфейс, не использует ни 5250, ни 3270 и обычно взаимодействует с IBM i через базу данных. Вы действительно заинтересованы в доступе к базе данных или доступе к меню/программе зеленого экрана?
Я хочу получить доступ к меню зеленого экрана, чтобы автоматизировать несколько задач.
Запуск (локальных) программ и автоматизация нажатия клавиш могут выполняться с помощью Python, но лучше с помощью AutoHotkey. Да, это еще один язык для изучения, но это не сложно. Более фундаментальная цель (автоматизация задач на IBM i) лучше всего достигается путем выяснения того, что делают эти опции меню (выдача команд, запуск программ, какое-либо манипулирование базой данных и т. д.), и написания чего-то, что делает эти вещи напрямую, не через какой-либо пользовательский интерфейс. Python с pyodbc — хороший способ сделать это.
В настоящее время я сталкиваюсь с той же проблемой. Мне удалось запустить IBMi (ACS), однако после его запуска мой скрипт на Python перестает работать, как будто приложение препятствует запуску Python. Вообще говоря, приложение, похоже, не обнаруживает скрипт. Но как только я закрыл приложение, мой скрипт на Python продолжает работать.. Я указал некоторое указание, например, timeleep, однако, как я уже упоминал ранее, он продолжает эту строку кода только один раз IBM закрыта. Будет добавлено несколько строк, чтобы переместить выделение на 5250 и ввести учетные данные.
* Я пробовал с pyautogui, все еще сталкиваюсь с той же проблемой. так что теперь я попробовал клавиатуру импорта pywinauto.
#Variables
dir = sys.argv[1]
username = sys.argv[2]
password = sys.argv[3]
x = dir.split("\\")
print(x[-1])
command = "cd \ && cd Users/Public/Desktop && " + '"' + x[-1] + '"'
print(command)
os.system(command)
------ FROM THIS LINE OF CODE ONWARDS, IT STOPPED RUNNING ONCE IBM IS LAUNCHED ---
print('TIME START')
time.sleep(5)
print('TIME END')
keyboard.send_keys(username)
keyboard.send_keys(password)
keyboard.send_keys("{ENTER}")
print('Done.')
Благодарим вас за помощь в рассмотрении этого вопроса. Спасибо
Пожалуйста, пишите вопросы как вопросы, а не ответы. Спасибо!
Попробуйте это: пожалуйста, проверьте команду .. Я думаю, что вы даете неправильную команду. cmd = r"C:\Users\Public\IBM\ClientSolutions\Start_Programs\Windows_x86-64\acslaunch_win-64.exe" (или путь к win-32.exe) в зависимости от того, какой из них, или попробуйте оба работает. system = r'/system = "здесь идет имя вашей системы или IP"' укажите здесь имя хоста
Хорошо, спасибо, ребята. @BuckCalabro, хорошо подмечено. Виноват. Спасибо
os.system() является блокирующим оператором. То есть он блокирует или останавливает выполнение дальнейшего кода Python до тех пор, пока все, что делает os.system(), не завершится. Эта проблема требует, чтобы мы создали отдельный поток, чтобы процесс Windows, выполняющий программное обеспечение ACS, выполнялся одновременно с остальным кодом Python. subprocess — это одна библиотека Python, которая может справиться с этим.
Вот некоторый код, который открывает окно терминала ACS 5250 и помещает пользователя и пароль в это окно. Там нет проверки ошибок, и есть некоторые детали настройки, которые моя система предполагает относительно ACS, которых может не быть в вашей системе.
# the various print() statements are for looking behind the scenes import sys import time import subprocess from pywinauto.application import Application import pywinauto.keyboard as keyboard userid = sys.argv[1] password = sys.argv[2] print("Starting ACS") cmd = r"C:\Users\Public\IBM\ClientSolutions\Start_Programs\Windows_x86-64\acslaunch_win-64.exe" system = r'/system = "your system name or IP goes here"' # Popen requires the command to be separate from each of the parameters, so an array result = subprocess.Popen([cmd, r"/plugin=5250",system], shell=True) print(result) # wait at least long enough for Windows to get past the splash screen print("ACS starting - pausing") time.sleep(5) print("connecting to Windows process") ACS = Application().connect(path=cmd) print(ACS) # debugging windows = ACS.windows() print(windows) dialog = ACS['Signon to IBM i'] print(dialog) print("sending keystrokes") keyboard.send_keys(userid) keyboard.send_keys("{TAB}") keyboard.send_keys(password) keyboard.send_keys("{ENTER}") print('Done.')
Это работало с небольшими изменениями... но это ненадежно, поскольку, если окно не открывается, оно все равно отправляет нажатия клавиш... Можем ли мы изменить его таким образом, чтобы оно отправляло ключи только в окно ACS?
Предоставьте достаточно кода, чтобы другие могли лучше понять или воспроизвести проблему.