2014-08-28 3 views
1

Это странно, но вот оно.Python: Не удалось удалить новую строку из строки

Ниже приведен код, который открывает файл в виде журнала и транслирует в него некоторый вывод консоли. Позже я открою этот файл и хочу скопировать содержимое файла (каждая строка - путь к каталогу файла) в мой текущий каталог, однако моя оболочка возвращает ошибку, заявив, что не может найти файл, потому что у него есть к нему присоединяется новая линия. Когда я печатаю строку внутри скрипта, у нее нет новой строки, но когда я пытаюсь ее скопировать в сценарий, что она делает, что дает?

with open("log.txt", 'a+') as log: 
    for something in something_else: 
     p1 = subprocess.Popen(["script.py", "-x", "-options"], stdout=subprocess.PIPE) 
     p2 = subprocess.Popen(["egrep", 'abc|xyz'], stdin=p1.stdout, stdout=log, universal_newlines=True) 
     p1.stdout.close() 
     output = p2.communicate()[0] #Debug purposes 

Позже ...

with open("log.txt") as log2: 
    for line in log2: 
     line = re.sub(".pattern", "pattern", line) 
     line.rstrip() #doesn't work 
     call(['cp', line, '.']) 

Мои возвращения оболочки: ср не может стат `путь/к/реж ** \ п **» нет такого файла или каталога

+0

Вы можете попробовать позвонить (['cp', line [: - x], '.']). Попробуйте сначала установить x в 1 и посмотреть, исчезли ли новые строки? – user3885927

+0

'universal_newlines = True' здесь не действует. Перенаправление происходит на уровне дескриптора файла ('p1.stdout.fileno()', 'log.fileno()'). 'output' здесь' None'. – jfs

+0

вы можете использовать 'shutil.copy (line, '.')' Вместо 'call (['cp', line, '.'])'. – jfs

ответ

4

Строки неизменяемый в Python, вместо этого используйте line = line.rstrip().

+0

Это сработало .. yikes, показывая мой уровень начинающих питонов. Спасибо. – liquid

3

Это потому, что line.rstrip() возвращает копию оригинальной строки (см. docs).

Значит, что-то вроде line = line.rstrip() должно выполнить эту работу.

+0

Это сработало, спасибо! Хотел бы я отметить два ответа, как принято. – liquid

+0

@liquid не беспокоится, что один раз меня тоже споткнулся :) – tttthomasssss

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