#!/usr/bin/env python
# -*- coding: utf-8 -*-
if __name__ == "__main__":
import sqlite3
dbname = './db/database.db'
try:
print "INITILIZATION..."
con = sqlite3.connect(dbname)
cursor = con.cursor()
cursor.execute("SELECT name FROM sqlite_master WHERE type='table';")
tables = cursor.fetchall()
for tbl in tables:
print "\n######## "+tbl[0]+" ########"
cursor.execute("SELECT * FROM "+tbl[0]+";")
rows = cursor.fetchall()
for row in rows:
print row
print(cursor.fetchall())
except KeyboardInterrupt:
print "\nClean Exit By user"
finally:
print "\nFinally"
Ну, можно написать обобщенный анализатор и менеджер процессов, который мог бы справиться с этим для вас, но, к счастью, он уже поставляется с Linux. Все, что вам нужно сделать, это сказать ему, какую команду запустить, и она будет обрабатывать перенаправление для вас.
Итак, если бы вы немного изменили свои команды, вы могли бы легко это сделать. Просто объедините слова вместе со строками, заключив в кавычки, когда в этих словах могут быть пробелы или другие специальные символы, и тогда вы можете использовать список, такой как:
/bin/sh
, -c
, {your new string here} > /some/file
[ 115]
Et вуаля, материал, записанный на диск. :)
Глядя на документы для subprocess.call , я вижу, что у него есть дополнительные параметры:
subprocess.call(args, *, stdin=None, stdout=None, stderr=None, shell=False)
Если вы укажете stdout=
для файла, который вы открыли, то вывод вашего кода будет идти к этому файлу, что в основном такое же поведение?
Я не вижу вашего точного случая использования, но это, безусловно, способ синтезировать поведение канала командной строки, с небольшим количеством кода изменение.
Обратите внимание, что в документах также говорится, что вам не следует использовать встроенную поддержку = PIPE, в зависимости от ваших конкретных требований. Важно, чтобы вы регулярно читали данные из канала, иначе писатель остановится, когда буфер заполнится.