Py (os.path): есть ли макс. размер строки перед автоматической линией разрыва/возвратом?

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

Вопрос. Вставляет ли Python (или вызовы os.path) автоматически возврат после определенного количества символов?

Предыстория: я пытаюсь извлечь акустические характеристики из файлов .wav с помощью инструмента openSMILE. Для этого я передаю строки пути (входной файл и выходной файл) через подпроцесс.

Вызов SMILExtract принимает 3 аргумента (-C для конфигурации, -I для входного файла, -O для выходного файла). Я подготавливаю эти 3 аргумента со строковыми операциями и сохраняю аргументы в списке, который передается вызову подпроцесса.

def extractFeatures(self,inputFile):
    self.openSMILEsettings.append("-I " + inputFile)

    outputFile = os.path.dirname(inputFile) + "/featuresOf_" +os.path.basename(inputFile)[0:-3] + "arff"
    self.openSMILEsettings.append("-O " + outputFile)
    print self.openSMILEsettings[2]
    print ' '.join(self.openSMILEsettings)
    # print subprocess.check_output(['SMILExtract'] + self.openSMILEsettings)

extractFeatures("/media/USERNAME/MountPOINT/Dir1/Dir2/Dir3/02003_SomeSesssionNumber1_and2_2323123/audioFile.wav")

В консоли вывод команды печати (print ' '.join(...)) выглядит нормально (пример ниже)

-C OSconfig/IS12_speaker_trait.conf -I /media/USERNAME/MountPOINT/Dir1/Dir2/Dir3/02003_SomeSesssionNumber1_and2_2323123/audioFile.wav -O /media/USERNAME/MountPOINT/Dir1/Dir2/Dir3/02003_SomeSesssionNumber1_and2_2323123/featuresOf_audioFile.arff

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

-C OSconfig/IS12_speaker_trait.conf -I /media/USERNAME/MountPOINT/Dir1/Dir2/Dir3/02003_SomeSesssionNumber1_and2_2323123/audioFile.wav -O /media/USERNAME/MountPOINT/Dir1/Dir2/Dir3/02003_SomeSesssionNumber1_and2_2323123/featur
esOf_audioFile.arff

person Björn    schedule 01.08.2018    source источник
comment
Какой текстовый редактор вы используете? Это просто встроенный перенос слов?   -  person GetHacked    schedule 01.08.2018
comment
может быть, я использую gedit в данный момент.   -  person Björn    schedule 01.08.2018
comment
Я представляю, что именно это и происходит. Попробуйте просмотреть его с отключенным переносом слов или с отображением пробельных символов, чтобы увидеть, существует ли символ \n.   -  person GetHacked    schedule 01.08.2018


Ответы (2)


Это перенос слов, вызванный вашим текстовым редактором. По сути, здесь нет символа новой строки, но ваш редактор не может отобразить текст на одной строке, потому что он слишком длинный. В результате он выталкивает текст на новую строку.

Вы можете отключить это в gedit, выбрав «Просмотр» -> «Настройки» -> «Снять флажок «Включить перенос текста».

person GetHacked    schedule 01.08.2018

Спасибо Дино. Это объясняет, почему в текстовом редакторе был возврат.

Тем временем я нашел решение для выполнения вызова SMILExtract. Я изменил вызов подпроцесса на os.system и использовал шаблон, подобный объясненному в другом месте

Новый вызов выглядит так:

def extractFeatures(self,inputFile):
    self.openSMILEsettings.append("-I " + inputFile)
    outputFile = os.path.dirname(inputFile) + "/featuresOf_" +os.path.basename(inputFile)[0:-3] + "arff"
    self.openSMILEsettings.append("-O " + outputFile)
    cmd_template = 'SMILExtract {config_path} {wav_path} {arff_path}'

    os.system(cmd_template.format(
        config_path=self.openSMILEsettings[0],
        wav_path=self.openSMILEsettings[1],
        arff_path=self.openSMILEsettings[2],
        ))

Теперь это работает гладко. Есть ли недостаток в использовании os.system вместо подпроцесса?

person Björn    schedule 01.08.2018
comment
Я бы задал это как отдельный вопрос. - person GetHacked; 02.08.2018