Извините за глупый вопрос, но как подать файл на вход программы? Попробовал разные способы, но все равно не видит файл.
import array import sys import struct import os SECTOR_SIZE = 512 def sizemb(num, suffix=’B’): for unit in [», ‘Ki’, ‘Mi’, ‘Gi’, ‘Ti’, ‘Pi’, ‘Ei’, ‘Zi’]: if abs(num) < 1024.0: return «%3.1f%s%s» % (num, unit, suffix) num /= 1024.0 return «%.1f%s%s» % (num, ‘Yi’, suffix) class VmdkParser: def __init__(self, i, filesize): self.i = i self.errors = [] self.filesize = filesize self.blocks = [None] * int(filesize / SECTOR_SIZE) def d(self, msg, offset=-1): if offset == -1: offset = self.i.tell() print(«[%12d] %s» % (offset, msg)) def e(self, msg, offset=-1): if offset == -1: offset = self.i.tell() msg = «[%12d] ERROR %s» % (offset, msg) self.errors.append(msg) print(msg) def parse_magic(self): self.magic = self.i.read(4) if self.magic == b»COWD»: self.d(«Version 3 header found») self.version = 3 elif self.magic == b»KDMV»: self.d(«Version 4 header found») self.version = 4 else: self.d(«Invalid magic string %s» % self.magic) raise Exception(«Could not determine file type») def parse_v3_header(self): hdr = struct.unpack(«self.capacity: self.e(«gte %d out of bounds» % gte, gteo) for i in range(0, self.granularity): self.reserve_block(gte + i, gd, ctr) ctr += 1 def reserve_block(self, idx, gd, gt): # print(«Reserving %d for %d,%d» %(idx, gd,gt)) if self.blocks[idx] != None: self.e(«Block %d already reserved by %d,%d» % (idx, self.blocks[idx][0], self.blocks[idx][1])) else: self.blocks[idx] = [gd, gt] def check_blocks(self): self.used_blocks = 0 for idx, b in enumerate(self.blocks): if b == None: # self.d(«Free block %d» % idx, idx * SECTOR_SIZE) pass else: self.used_blocks += 1 expect_used = self.gtes + self.gts * 4 + 2 if self.used_blocks != expect_used: self.e(«Expected %d blocks used, found %d» % (expect_used, self.used_blocks)) if self.used_sectors != None and self.used_sectors != expect_used: self.e(«Expected %d blocks used, found %d in v3 header» % (expect_used, self.used_sectors)) def parse_header(self): if self.version == 4: self.parse_v4_header() elif self.version == 3: self.parse_v3_header() else: raise Exception(«No header found») def parse(self): self.parse_magic() self.parse_header() self.print_header() self.parse_gd() self.check_blocks() filesize_estimation = self.gtes * SECTOR_SIZE * self.granularity self.d(«Parsing complete: %d grains (%s), %d gts, filesize %s, %d used_blocks, %d errors» % ( self.gtes, sizemb(filesize_estimation), self.gts, sizemb(self.filesize), self.used_blocks, len(self.errors))) def main(filename): inputfile = None try: fsize = os.stat(filename).st_size inputfile = open(filename, ‘rb’) except: print(«Can’t open file») sys.exit(1) p = VmdkParser(inputfile, fsize) try: p.parse() except Exception as e: print(e.message) if (len(sys.argv) < 2): print(«Please give me a nice vmdk file!») sys.exit(1) main(sys.argv[1])
Отслеживать
Как подать документы в налоговую с помощью ЭЦП (ООО или ИП) | Разбираем тонкости и нюансы подачи
Linux для Начинающих — Перенаправление вывода / ввода — /dev/null
24k 4 4 золотых знака 19 19 серебряных знаков 35 35 бронзовых знаков
Источник: ru.stackoverflow.com
Дать на вход программе файл через аргументы командной строки — C (СИ)
Как реализовать в Visual Studio две вещи 1)Дать на вход программе файл через аргументы командной строки. 2)Написать что-то в выходной файл, то есть в файл трассировки? Знаю, как читать символы с обычного файла, который создается в проекте. А вот как работать с командной строкой, не нашел.
Код к задаче: «Дать на вход программе файл через аргументы командной строки»
Листинг программы
int main(int argc, char* argv[]) < // do something with argc >// argc —> количество аргументов, переданных программе из CMD // argv[] —> массив указателей, в котором будут содержаться аргументы, переданные из CMD
Источник: studassistent.ru
Как подать файл на вход программе
С каждым открытым файлом связан дескриптор файла. [1] Дескрипторы файлов stdin, stdout и stderr — 0, 1 и 2, соответственно. При открытии дополнительных файлов, дескрипторы с 3 по 9 остаются незанятыми. Иногда дополнительные дескрипторы могут сослужить неплохую службу, временно сохраняя в себе ссылку на stdin, stdout или stderr. [2] Это упрощает возврат дескрипторов в нормальное состояние после сложных манипуляций с перенаправлением и перестановками (см. Пример 16-1).
COMMAND_OUTPUT > # Перенаправление stdout (вывода) в файл. # Если файл отсутствовал, то он создется, иначе — перезаписывается. ls -lR > dir-tree.list # Создает файл, содержащий список дерева каталогов. : > filename # Операция > усекает файл «filename» до нулевой длины. # Если до выполнения операции файла не существовало, # то создается новый файл с нулевой длиной (тот же эффект дает команда ‘touch’). # Символ : выступает здесь в роли местозаполнителя, не выводя ничего. > filename # Операция > усекает файл «filename» до нулевой длины. # Если до выполнения операции файла не существовало, # то создается новый файл с нулевой длиной (тот же эффект дает команда ‘touch’). # (тот же результат, что и выше — «: >», но этот вариант неработоспособен # в некоторых командных оболочках.) COMMAND_OUTPUT >> # Перенаправление stdout (вывода) в файл. # Создает новый файл, если он отсутствовал, иначе — дописывает в конец файла. # Однострочные команды перенаправления # (затрагивают только ту строку, в которой они встречаются): # ——————————————————————— 1>filename # Перенаправление вывода (stdout) в файл «filename». 1>>filename # Перенаправление вывода (stdout) в файл «filename», файл открывается в режиме добавления.
2>filename # Перенаправление stderr в файл «filename». 2>>filename # Перенаправление stderr в файл «filename», файл открывается в режиме добавления. filename # Перенаправление stdout и stderr в файл «filename». #============================================================================== # Перенаправление stdout, только для одной строки.
LOGFILE=script.log echo «Эта строка будет записана в файл «$LOGFILE».» 1>$LOGFILE echo «Эта строка будет добавлена в конец файла «$LOGFILE».» 1>>$LOGFILE echo «Эта строка тоже будет добавлена в конец файла «$LOGFILE».» 1>>$LOGFILE echo «Эта строка будет выведена на экран и не попадет в файл «$LOGFILE».» # После каждой строки, сделанное перенаправление автоматически «сбрасывается». # Перенаправление stderr, только для одной строки. ERRORFILE=script.errors bad_command1 2>$ERRORFILE # Сообщение об ошибке запишется в $ERRORFILE. bad_command2 2>>$ERRORFILE # Сообщение об ошибке добавится в конец $ERRORFILE. bad_command3 # Сообщение об ошибке будет выведено на stderr, #+ и не попадет в $ERRORFILE. # После каждой строки, сделанное перенаправление также автоматически «сбрасывается». #============================================================================== 2> FILENAME < FILENAME # Ввод из файла. # Парная команде filename # Файл «filename» открывается на чтение и запись, и связывается с дескриптором «j». # Если «filename» отсутствует, то он создается. # Если дескриптор «j» не указан, то, по-умолчанию, бередся дескриптор 0, stdin. # # Как одно из применений этого — запись в конкретную позицию в файле. echo 1234567890 > File # Записать строку в файл «File». exec 3<> File # Открыть «File» и связать с дескриптором 3. read -n 4 1234.67890 # Произвольный доступ, да и только! | # Конвейер (канал). # Универсальное средство для объединения команд в одну цепочку. # Похоже на result-file # Содержимое всех файлов .txt сортируется, удаляются повторяющиеся строки, # результат сохраняется в файле «result-file».
Операции перенаправления и/или конвейеры могут комбинироваться в одной командной строке.
command < input-file >output-file command1 | command2 | command3 > output-file
Допускается перенаправление нескольких потоков в один файл.
ls -yz >> command.log 2>yz» в команде «ls» будет записано в файл «command.log». # Поскольку stderr перенаправлен в файл.
Закрытие дескрипторов файлов
Закрыть дескриптор входного файла n.
Источник: www.opennet.ru