Есть ли команда Linux, которая записывает свои аргументы командной строки в файл, без использования оболочки?

#!/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"
-1
задан static_rtti 16 January 2019 в 10:01
поделиться

2 ответа

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

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

/bin/sh, -c, {your new string here} > /some/file [ 115]

Et вуаля, материал, записанный на диск. :)

0
ответ дан Tanktalus 16 January 2019 в 10:01
поделиться

Глядя на документы для subprocess.call , я вижу, что у него есть дополнительные параметры:

subprocess.call(args, *, stdin=None, stdout=None, stderr=None, shell=False)

Если вы укажете stdout= для файла, который вы открыли, то вывод вашего кода будет идти к этому файлу, что в основном такое же поведение?

Я не вижу вашего точного случая использования, но это, безусловно, способ синтезировать поведение канала командной строки, с небольшим количеством кода изменение.

Обратите внимание, что в документах также говорится, что вам не следует использовать встроенную поддержку = PIPE, в зависимости от ваших конкретных требований. Важно, чтобы вы регулярно читали данные из канала, иначе писатель остановится, когда буфер заполнится.

0
ответ дан Gem Taylor 16 January 2019 в 10:01
поделиться
Другие вопросы по тегам:

Похожие вопросы: