Имитация ввода командной строки из Python и ввод пароля (os, subprocess).

Никита Г

Новичок
Пользователь
Апр 20, 2023
4
0
1
Доброго всем дня и хорошего настроения!
Помогите, пожалуйста! Создал через python команду на загрузку базы данных . Если делать это через командную строку, то после команды необходимо ввести пароль (cmd). Пробовал и библиотекой os (Код1) и subprocess (Код2). Вручную все получается...

Рабочий запрос через командную строку:
"C:\Program Files\PostgreSQL\15\bin\psql"', "-U postgres", r'dbbank < "C:\Users\NiksON\OneDrive\dump.sql"

Код1:
Python:
import os
cmd1 = os.system(r'cd C:\\')
print(cmd1)
cmd2 = os.system(r'"C:\Program Files\PostgreSQL\15\bin\psql" -U postgres dbbank < "C:\Users\NiksON\OneDrive\dump.sql"')
print(cmd2)
cmd2 = os.system('qwerty123456')
print(cmd2)

Код2:
Python:
import subprocess
args = [r'"C:\Program Files\PostgreSQL\15\bin\psql"', "-U postgres", r'dbbank < "C:\Users\NiksON\OneDrive\dump.sql"']
run = subprocess.run(args , input='qwerty123456', encoding='utf-8')

python 3.9.12
OS Windows 10
 

Вложения

  • cmd.png
    cmd.png
    4,6 КБ · Просмотры: 4
  • Код1.png
    Код1.png
    15,9 КБ · Просмотры: 4
  • Код2.png
    Код2.png
    43,4 КБ · Просмотры: 4

regnor

Модератор
Команда форума
Модератор
Июл 7, 2020
2 581
457
83
можно это сделать средствами постгре
и не надо ничего имитировать
 

Никита Г

Новичок
Пользователь
Апр 20, 2023
4
0
1
В целом вопрос не только про установку dump БД или его создания (но хотелось бы через python). Необходимость взаимодействия с командной строкой постоянна и распространена: много какие процессы можно автоматизировать. Но даже в документации к subprocess не смог найти ответа (ну или маловато опыта, чтобы самостоятельно разбираться в библиотеках...) как вводить пароль на запрос от программы. Нашел несколько похожих вопросов на форумах, но их решения не помогли в моем случае.
 
Последнее редактирование:

regnor

Модератор
Команда форума
Модератор
Июл 7, 2020
2 581
457
83
В целом вопрос не только про установку dump БД или его создания (но хотелось бы через python). Необходимость взаимодействия с командной строкой постоянна и распространена: много какие процессы можно автоматизировать. Но даже в документации к subprocess не смог найти ответа (ну или маловато опыта, чтобы самостоятельно разбираться в библиотеках...) как вводить пароль на запрос от программы. Нашел несколько похожих вопросов на форумах, но их решения не помогли в моем случае.
где ошибка отказано в доступе у вас пароль не верный
 

Никита Г

Новичок
Пользователь
Апр 20, 2023
4
0
1
где ошибка отказано в доступе у вас пароль не верный
Попробовал скопировать прямо из кода и вставить в консоль-работает. Дополнительно перепробовал несколько кодировок.
 

regnor

Модератор
Команда форума
Модератор
Июл 7, 2020
2 581
457
83
Попробовал скопировать прямо из кода и вставить в консоль-работает. Дополнительно перепробовал несколько кодировок.
почему тогда пароли то разные, что вы выложили в коде, и что показали на скрине?
 

Никита Г

Новичок
Пользователь
Апр 20, 2023
4
0
1
Для отсутствия разночтения пароль сделал "Qwerty!23456" прошу прощение.
почему тогда пароли то разные, что вы выложили в коде, и что показали на скрине?
Спасибо что помогаете. Попробовал передать в процесс пароль, но все равно не выходит. Процесс просто подвисает и все.
Python:
import subprocess
proc = subprocess.Popen(r'"C:\Program Files\PostgreSQL\15\bin\psql" -U postgres dbbank < "C:\Users\NiksON\OneDrive\dump.sql"'
                        , shell=True, stdout=subprocess.PIPE, stdin=subprocess.PIPE, encoding='utf-8')
stdout = proc.communicate(input='Qwerty!23456', timeout=30)
print(stdout[0],stdout[1])

Задержку сделал, чтобы прерывался процесс.
 

Форум IT Специалистов