2017-01-11 5 views
-2

Я пишу скрипт для поиска по базе данных с использованием баз данных cli. Я смог получить доступ к базе данных с помощью python, используя os.system (команды для доступа к базе данных). Однако функция .system не будет вводить какие-либо команды в cli.использовать python для работы с cli

+1

Зачем использовать эти (неизвестные) команды CLI, а не библиотеки python для этой (неизвестной) базы данных? –

+0

Почему вы не пытаетесь использовать pymysql? – McGrady

+1

Пожалуйста, отредактируйте ваше сообщение, чтобы включить [mcve] кода, который не работает, и, пожалуйста, укажите базу данных, которая используется, чтобы мы могли предоставить полезные ответы. –

ответ

0

Похоже, что используемая вами база данных может ожидать ввода через клавиатуру (т. Е. Она ждет ввода). Если это так, то вы не сможете использовать system для этого - вам нужно будет запустить процесс CLI базы данных, а затем управлять связью с ним.

Вот простой пример. Начнем с простого приложения, которое принимает данные через стандартный ввод и записывает его обратно. Это будет похоже на вашу программу CLI базы данных.

# cli.py 
s = input()  # Avoid input() on Python 2! 
print("Hello, %s!" % s) 

А вот водитель (код, который вы пишете)

# driver.py 
import subprocess 
from subprocess import PIPE 

proc = subprocess.Popen(['python3', './cli.py'], stdin=PIPE, stdout=PIPE) 
try: 
    outs, errs = proc.communicate(b'world', timeout=2) 
    print(outs.decode('utf-8')) 
except: 
    print('An error occurred.') 

Ожидаемый результат:

Hello, world! 

Так что вам нужно, чтобы организовать все это водить команды в CLI базы данных и прочитать результаты. Это звучит как ужасное время - как заявил cricket_007, база данных, вероятно, имеет доступ к ней, не пройдя через CLI.

Если вам абсолютно необходимо продолжить движение по этому маршруту, ознакомьтесь с модулем pexpect, который должен справиться с большой сложностью этого для вас.

Смежные вопросы