Как мы можем автоматизировать вход в систему IBM с помощью Python?

Мне нужно войти в систему IBM i с помощью Python, не вводя имя пользователя и пароль вручную.

Я использовал библиотеку py3270, но она не может обнаружить эмулятор wc3270. Эмулятор, который я использую, имеет расширение .hod и открывается с помощью IBM i Launcher. Кто-нибудь может мне с этим помочь? какое может быть возможное решение для этого?

Предоставьте достаточно кода, чтобы другие могли лучше понять или воспроизвести проблему.

Community 18.01.2023 10:39

@Techie Имейте в виду, что, хотя IBM i поддерживает соединения 3270, собственный способ связи с терминалом - 5250.

PoC 18.01.2023 14:38

Что вы планируете делать с Python после входа в систему? (Я спрашиваю это, потому что в вашем вопросе недостаточно информации, чтобы я действительно был уверен в том, что вы спрашиваете.)

John Y 19.01.2023 06:32

Вопрос имеет тег websphere. Как Websphere вписывается в этот вопрос? Я хочу сказать, что, вообще говоря, Websphere представляет собой веб-интерфейс, не использует ни 5250, ни 3270 и обычно взаимодействует с IBM i через базу данных. Вы действительно заинтересованы в доступе к базе данных или доступе к меню/программе зеленого экрана?

Buck Calabro 19.01.2023 16:02

Я хочу получить доступ к меню зеленого экрана, чтобы автоматизировать несколько задач.

Techie 20.01.2023 06:06

Запуск (локальных) программ и автоматизация нажатия клавиш могут выполняться с помощью Python, но лучше с помощью AutoHotkey. Да, это еще один язык для изучения, но это не сложно. Более фундаментальная цель (автоматизация задач на IBM i) лучше всего достигается путем выяснения того, что делают эти опции меню (выдача команд, запуск программ, какое-либо манипулирование базой данных и т. д.), и написания чего-то, что делает эти вещи напрямую, не через какой-либо пользовательский интерфейс. Python с pyodbc — хороший способ сделать это.

John Y 02.02.2023 07:24
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
6
112
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

В настоящее время я сталкиваюсь с той же проблемой. Мне удалось запустить 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.')

Благодарим вас за помощь в рассмотрении этого вопроса. Спасибо

Пожалуйста, пишите вопросы как вопросы, а не ответы. Спасибо!

Buck Calabro 20.01.2023 17:33

Попробуйте это: пожалуйста, проверьте команду .. Я думаю, что вы даете неправильную команду. cmd = r"C:\Users\Public\IBM\ClientSolutions\Start_Programs\Windows‌​_x86-64\acslaunch_wi‌​n-64.exe" (или путь к win-32.exe) в зависимости от того, какой из них, или попробуйте оба работает. system = r'/system = "здесь идет имя вашей системы или IP"' укажите здесь имя хоста

Techie 23.01.2023 11:39

Хорошо, спасибо, ребята. @BuckCalabro, хорошо подмечено. Виноват. Спасибо

GrootLuie 30.01.2023 09:43
Ответ принят как подходящий

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?

Techie 23.01.2023 12:07

Другие вопросы по теме