5 / 5 / 0
Регистрация: 25.09.2017
Сообщений: 569

Передачи строки параметров объекту subropcess и проблемы её парсинга

18.07.2020, 09:45. Показов 1435. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте. Мне нужно запустить последовательность строк команд в cmd. В этой последовательности есть команды, относящие к командам cmd, а есть и те команды, которые относятся к запускаемому .exe.


Python
1
2
3
4
5
import subprocess
 
seq = "A: && cd A:\\folder && ASC2BIN.EXE && nircmd.exe sendkeypress enter enter enter && file.ascii && file.bin"
 
p = subprocess.Popen([seq], shell=True, stdin=subprocess.PIPE,stdout=subprocess.PIPE)

ASC2BIN.EXE требует трёхкратного нажатия клавиши ENTER перед тем как в интерактивном режиме следует последовательно ввести 2 параметра --- названия файлов (если они лежат в том же каталоге, что и ASC2BIN.EXE) или полные пути до них.

Последовательность , записанная в переменную seq работает до запуска ASC2BIN.EXE, а трехкратное нажатие кл. ENTER не происходит. nircmd.exe лежит там же где и ASC2BIN.EXE --- по пути A:\\folder

Как нужно переписать строку seq, что сработал nircmd.exe после запуска ASC2BIN.EXE?
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
18.07.2020, 09:45
Ответы с готовыми решениями:

Проблемы безопасности при передачи параметров формы
Вот проблема возникла - адрес URL на сайте: http://www.mysite.ru/file.asp?id=16 Соответственно в файле file.asp содержится что-то из...

Проблемы парсинга (часть кода пропадает)
Всем доброго времени суток! есть сайт https://fonbet.betgamestv.eu/ext/game/odds/fonbet/4/0/decimal (НЕ РЕКЛАМА!!!!) раньше без проблем...

Передача объектов в качестве параметров другому объекту
Добрый день, подскажите как правильно передать объекты в качестве параметров другому объекту чтобы при этом еще и соблюсти инкапсуляцию ...

6
Просто Лис
Эксперт Python
 Аватар для Рыжий Лис
5973 / 3735 / 1099
Регистрация: 17.05.2012
Сообщений: 10,791
Записей в блоге: 9
18.07.2020, 16:27
Лучший ответ Сообщение было отмечено Alex_py как решение

Решение

Python
1
2
3
4
5
6
7
import os
 
os.chdir(r'A:\folder')
assert os.getcwd() == r'A:\folder'
p = subprocess.Popen(['ASC2BIN.EXE'], stdin=subprocess.PIPE, stdout=subprocess.PIPE)
grep_stdout = p.communicate(input=b'\n\n\n')[0]
print(grep_stdout.decode())

Разве не проще запустить ASC2BIN.EXE с нужными аргументами?
1
5 / 5 / 0
Регистрация: 25.09.2017
Сообщений: 569
18.07.2020, 18:26  [ТС]
Цитата Сообщение от Рыжий Лис Посмотреть сообщение
Разве не проще запустить ASC2BIN.EXE с нужными аргументами?
Да я не знал.

Вообще, Вы хорошо мне помогли. Параметры, если следует передавать в строковом формате, то можно поставить флаг text=True:

Python
1
2
3
4
5
6
7
import os
 
os.chdir(r'A:\folder')
assert os.getcwd() == r'A:\folder'
p = subprocess.Popen(['ASC2BIN.EXE'], stdin=subprocess.PIPE, stdout=subprocess.PIPE, text = True)
param1, param2 = 'hex.ascii', 'file.bin'
p.communicate(input='\n\n\n' + param1 + '\n' + param2)
0
Просто Лис
Эксперт Python
 Аватар для Рыжий Лис
5973 / 3735 / 1099
Регистрация: 17.05.2012
Сообщений: 10,791
Записей в блоге: 9
18.07.2020, 18:36
Цитата Сообщение от Alex_py Посмотреть сообщение
Да я не знал.
Если можно, то код сократится так:
Python
1
2
os.chdir(r'A:\folder')
p = subprocess.Popen(['ASC2BIN.EXE', 'hex.ascii', 'file.bin'])
1
5 / 5 / 0
Регистрация: 25.09.2017
Сообщений: 569
18.07.2020, 19:31  [ТС]
Цитата Сообщение от Рыжий Лис Посмотреть сообщение
Если можно, то код сократится так:

Да, дело в том, что так exe запрограммирован, что сначала нужно пролистать его справку 3-х кратным нажатием ENTER, потом только будет приглашение ввести первый параметр param1, потом приглашение ввести параметр param2. А иначе-то, да, можно было бы сократить код. Спасибо ещё раз Вам, прямо спасли =)
0
Просто Лис
Эксперт Python
 Аватар для Рыжий Лис
5973 / 3735 / 1099
Регистрация: 17.05.2012
Сообщений: 10,791
Записей в блоге: 9
18.07.2020, 19:47
Я немного не про то. Откройте консоль и введите:
Bash
1
2
cd A:\folder
ASC2BIN.EXE hex.ascii file.bin
Должно отработать без входа интерактивный режим. Или попробовать вывести справку по ключам:
Bash
1
2
3
4
ASC2BIN.EXE /?
ASC2BIN.EXE -h
ASC2BIN.EXE --help
ASC2BIN.EXE -help
1
5 / 5 / 0
Регистрация: 25.09.2017
Сообщений: 569
18.07.2020, 21:39  [ТС]
Я когда запускаю этот exe сразу вылезают строки справки по поводу того, что это за exe и какой файл нужен подготовить для первого ввода. Как только запускаешь exe, последняя строка говорит нажать ENTER или ввести команду DOS. Далее, после нажатия ENTER, снова идут новые строки справки и приглашение нажать ENTER, после которого снова тоже самое и потом следуют 2 приглашения ввести входной файл (пример --- hex.ascii) и имя выходного файла (пример --- file.bin). Так, всего нужно нажать ENTER 3 раза, чтобы дойти до последовательного ввода параметров.


Эти команды не работают:

Цитата Сообщение от Рыжий Лис Посмотреть сообщение
Bash
1
2
3
4
ASC2BIN.EXE /?
ASC2BIN.EXE -h
ASC2BIN.EXE --help
ASC2BIN.EXE -help
Видимо его запрограммировали без вызова справки через параметр -h. Сам exe официальный, но был создан в 1997 году, насколько я помню.

Тоже пробовал --- идут первые строки справки и приглашает нажать ENTER:

Цитата Сообщение от Рыжий Лис Посмотреть сообщение
Bash
1
2
cd A:\folder
ASC2BIN.EXE hex.ascii file.bin
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
18.07.2020, 21:39
Помогаю со студенческими работами здесь

Как присвоить несколько параметров одному объекту?
Возможно ли реализовать следующее: в базе данных у меня есть пациент, у которого есть основной диагноз и сопутствующий. Основной - один,...

передачи параметров в функции
Ребята, помогите пожалуйста с заданием( завтра сдавать курсач а я не шарю в Си++ заранее благодарна вам ...

Механизмы передачи параметров
Составить алгоритм и программу, реализующую разные механизмы передачи параметров, на примере нахождения значений функций: 1) Функция...

Программа передачи параметров
НАПИСАНИЕ ПРОГРАММЫ ПЕРЕДАЧИ ПАРАМЕТРОВ С ПОМОЩЬЮ параметров командной строки

Оригинальный метод передачи параметров
Функция-фабрика создаёт временный объект, operator<< набивает его данными, после чего строка заканчивается. Вызывается деструктор...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

Новые блоги и статьи
Отчёт о затраченных материалах за определенный период с макетом печатной формы
Maks 21.04.2026
Отчёт из решения ниже размещён в конфигурации КА2. Задача: разработка отчёта по затраченным материалам за определённый период, с возможностью вывода печатной формы отчёта с шапкой и подвалом. В. . .
Отчёт о спецтехнике находящейся в ремонте
Maks 20.04.2026
Отчёт из решения ниже размещен в конфигурации КА2. Задача: отобразить спецтехнику, которая на данный момент находится в ремонте. Есть нетиповой документ "Заявка на ремонт спецтехники" который. . .
Памятка для бота и "визитка" для читателей "Semantic Universe Layer (Слой семантической вселенной)"
Hrethgir 19.04.2026
Сгенерировано для краткого описания по случаю сборки и компиляции скелета серверного приложения. И пусть после этого скажут, что статьи сгенерированные AI - туфта и не интересно. И это не реклама -. . .
Запрет удаления строк ТЧ документа при определённом условии
Maks 19.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "Аккумуляторы", разработанного в конфигурации КА2. У данного документа есть ТЧ, в которой в зависимости от прав доступа. . .
Модель заражения группы наркоманов
alhaos 17.04.2026
Условия задачи сформулированы тут Суть: - Группа наркоманов из 10 человек. - Только один инфицирован ВИЧ. - Колются одной иглой. - Колются раз в день. - Колются последовательно через. . .
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru