Использование модуля подпроцесса, как мне получить следующую команду?Использование подпроцесса для получения вывода
isql -v -b -d, DSN_NAME "DOMAIN\username" password <<<
"SELECT column_name, data_type
FROM database_name.information_schema.columns
WHERE table_name = 'some_table';"
Эта команда отлично работает, когда я запускаю его в Баш оболочку, но я не могу заставить его работать при работе внутри Python. Я пытаюсь сделать это из Python, потому что мне нужно иметь возможность изменять запрос и получать разные наборы результатов, а затем обрабатывать их на Python. Я не могу использовать один из хороших соединителей базы данных Python по разным причинам, из-за чего я пытаюсь передать вывод из isql.
Мой код в настоящее время выглядит примерно следующим образом:
bash_command = '''
isql -v -b -d, DSN_NAME "DOMAIN\username" password <<<
"SELECT column_name, data_type
FROM database_name.information_schema.columns
WHERE table_name = 'some_table';"
'''
process = subprocess.Popen(bash_command,
shell=True,
stdout=subprocess.PIPE,
stderr=subprocess.PIPE)
output, error = process.communicate()
Однако я пытался много вариаций:
- Используя всю команду в виде строки или в виде списка строк.
- Использование check_output vs Popen.
- Использование связи(), чтобы попытаться отправить запрос команде isql или иметь запрос в составе командной строки с использованием heredoc.
- Использование оболочки = True или нет.
- Задание/bin/bash или использование по умолчанию/bin/sh.
- Много разных цитат и экранов.
И почти каждая перестановка вышеизложенного.
Ни в коем случае я не получаю вывод запроса, который я ищу. Я уверен, что команда не отправляется в оболочку как есть, но я не могу сказать, что отправляется в оболочку.
Я чувствую, что это должно быть довольно просто, отправить команду в оболочку и вернуть ее обратно, но я просто не могу заставить ее работать. Я даже не вижу, какая команда отправляется в оболочку, даже используя pdb.
Проверили вы свой подпроцесс на простые команды, как Ls, Whoami и т.д.? – Sergius
Это запятая намеренно после '-d'? – jfs
@ J.F.Sebastian Да. Его разделитель. –