2016-09-28 3 views
0

Я нашел красивую небольшую программу для создания быстрых заметок в терминале. Существует небольшая нехватка функциональности - я не могу читать заметки, которые я сделал с ней, а также не могу очистить заметки из файла, где они хранятся. Я хотел бы изменить эту программу, поэтому я могу запустить ее с аргументами, чтобы прочитать то, что я там написал, а также очистить. У меня есть идея, как это сделать, но не могу найти место записи в коде, чтобы вставить мои строки. Я хочу, чтобы запустить его с аргументами, такими как: -r -cКак добавить дополнительные функции с аргументами в этом коде?

оригинальная программа выглядит следующим образом:

#!/usr/bin/env python3 

import time 
import os 
import sys 

# add the current local time to the entry header 
lines = [ time.asctime() + '\n' + '--------------------\n' ] 

if len(sys.argv) > 1: 
    lines.append(' '.join(sys.argv[ 1: ])) 
    lines[-1] += '\n' 
else: 
    while 1: 
     try: 
      line = input() 
     except EOFError: 
      break 

     # get more user input until an empty line 
     if len(line) == 0: 
      break 
     else: 
      lines.append(line + '\n') 


# only write the entry if the user entered something 
if len(lines) > 1: 
    memoir_path = os.path.expanduser('~/.memoir') 

    # prepend a seperator only if the file exists (there are entries already in there) 
    if os.path.exists(memoir_path): 
     lines.insert(0, '--------------------\n') 

    with open(memoir_path, 'a') as f: 
     f.writelines(lines) 

мой код, который я не знаю, куда вставить (если это правильно):

# read memoir file 
if str(sys.argv) == ("r"): 
    os.system('cat ~/.memoir') 

# clear memoir file 
if str(sys.argv) == ("c"): 
    os.system('> ~/.memoir') 

EDIT:

Я сделал несколько изменений, из-за ответ, и все работает отлично, но я хотел бы сделать этот код немного проще. Автор этого кода добавил некоторые функции usles для запуска этой программы с количеством случайных аргументов, которые будут «преобразованы» в пустые строки в примечании. Кажется, что он не работает в любом случае после моего обновления, поэтому я хочу избавиться от этой функции. Я думаю, что он начинается в строке № 37, ищите #here !!! комментарии

новый код выглядит следующим образом:

#!/usr/bin/env python3 

import time 
import os 
import sys 

def help(): 
    print ("memoir is a minimal cli diary") 
    print ("run script with -r argument to read notes") 
    print ("run script with -c argument to clear notes file") 
    print ("run script with -h argument for help") 

# add the current local time to the entry header 
lines = [ time.asctime() + '\n' + '------------------------\n' + '\n' ] 

if len(sys.argv) >= 2: 
    if sys.argv[1] == '-r': 
     # read .memoir file 
     os.system('cat ~/.memoir') 
     print('\n') 
     exit(0) 

    if sys.argv[1] == '-h': 
     # print help 
     help() 
     exit(0) 

    if sys.argv[1] == '-c': 
     # clear .memoir file 
     os.system('> ~/.memoir') 
     exit(0) 

    else: 
     print("invalid argument, type m -h for help") 
     exit(0) 

if len(sys.argv) > 1 and len(sys.argv) != 2: #here!!! 
    lines.append(' '.join(sys.argv[ 1: ])) 
    lines[-1] += '\n' 
else: 
    while 1: 
     try: 
      line = input() 
     except EOFError: 
      break 

     # get more user input until an empty line 
     if len(line) == 0: 
      break 
     else: 
      lines.append(line + '\n') 


# only write the entry if the user entered something 
if len(lines) > 1: 
    memoir_path = os.path.expanduser('~/.memoir') 

    # prepend a seperator only if the file exists (there are entries already in there) 
    if os.path.exists(memoir_path): 
     lines.insert(0, '\n------------------------\n') 

    with open(memoir_path, 'a') as f: 
     f.writelines(lines) 

if len(sys.argv) >= 2: 
    # clear .memoir file 
    if sys.argv[1] == '-c': 
     os.system('> ~/.memoir') 
+0

для использования аргументов командной строки как '-arg1 -arg2' Я бы предложил просмотреть модули' argparse' или 'docopt'. – albert

ответ

0

Во-первых, sys.argv массив с аргументами командной строки в нем. Таким образом, вы должны проверить длину этого:

if len(sys.argv) >= 2 : 
    #sys.argv[0] is the name of your program 
    if sys.argv[1] == '-c' : 

Тогда вы можете увидеть, что файл записывается последние строки:

if len(lines) > 1: 
memoir_path = os.path.expanduser('~/.memoir') 

# prepend a seperator only if the file exists (there are entries already in there) 
if os.path.exists(memoir_path): 
    lines.insert(0, '--------------------\n') 

#here the file is opened with 'a' = append mode. 
#If you want to override the content of the file (for your command 'clear'), use 'w' = write mode. 
with open(memoir_path, 'a') as f: 
    f.writelines(lines) 

Таким образом, вы можете включить команду «Очистить» в конце. Команда «читать» скорее найдет свое место в начале программы.

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