Почему я должен помещать имя исходного файла перед именами библиотек в командной строке компилятора?

Вот небольшая программа на Python 2, которая делает то, что вы хотите. Слова перечислены в хронологическом порядке первого появления, то есть каждое новое слово добавляется в конец списка, но было бы легко отсортировать слова по алфавиту или по количеству вхождений.

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

wordcount.py

#! /usr/bin/env python

''' Real-time word counting

    Written by PM 2Ring 2015.01.29
    From http://unix.stackexchange.com/q/181722/88378
'''

CSI = '\x1b['
clear = CSI + '2J' + CSI + 'H'

def main():
    words = []
    wordcount = {}
    while True:
        try:
            word = raw_input()
        except (KeyboardInterrupt, EOFError):
            print 
            break

        if word not in wordcount:
            words.append(word)
            wordcount[word] = 1
        else:
            wordcount[word] += 1

        print clear
        for word in words:
            print '%s: %d' % (word, wordcount[word])

if __name__ == '__main__':
    main()

Чтобы передать вывод yourprog в эту программу, вы можете сделать следующее:

yourprog | python wordcount.py

предполагая, что wordcount.py находится в текущем каталоге.

В качестве альтернативы предоставьте wordcount.py разрешение на выполнение (например, chmod a + x wordcount.py ) и поместите его в каталог в вашем списке PATH команд (т. Е. В каталог, указанный при вы выполняете echo "$ PATH" ). Затем вы можете выполнить

yourprog | wordcount.py

и запускать его где угодно.

Если у вас есть только Python 3, а не Python 2, программа потребует некоторых незначительных изменений для ее запуска.

FWIW, вот еще один сценарий Python, который я написал для проверки приведенного выше кода.Он печатает случайное слово, по одному слову в строке, каждые 0,5 секунды.

randwords.py

#! /usr/bin/env python

import random, time

wordlist = [
    'apple',
    'carrot',
    'pear',
    'orange',
    'banana',
    'cabbage',
    'potato'
]

def main():
    #Time delay between words, in seconds
    delay = 0.5
    while True:
        try:
            print random.choice(wordlist)
            time.sleep(delay)
        except KeyboardInterrupt:
            print 
            break

if __name__ == '__main__':
    main()

Вы можете запустить его, передав его вывод в wordcount.py следующим образом:

python -u randwords.py | python wordcount.py

Флаг -u указывает интерпретатору Python использовать небуферизованный Ввод / вывод.

0
17.03.2018, 07:57
1 ответ

Это задокументировано на вики Ubuntu . По умолчанию он установлен для уменьшения количества зависимостей в пакетах, но, как вы обнаружили, это означает, что порядок библиотек имеет значение :, вам необходимо убедиться, что объекты (любого типа )появляются до ] библиотеки, которые они используют.

Вы можете отключить это с помощью --no-as-needed.

3
28.01.2020, 02:23

Теги

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