Это странно, но вот оно.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, '.'])
Мои возвращения оболочки: ср не может стат `путь/к/реж ** \ п **» нет такого файла или каталога
Вы можете попробовать позвонить (['cp', line [: - x], '.']). Попробуйте сначала установить x в 1 и посмотреть, исчезли ли новые строки? – user3885927
'universal_newlines = True' здесь не действует. Перенаправление происходит на уровне дескриптора файла ('p1.stdout.fileno()', 'log.fileno()'). 'output' здесь' None'. – jfs
вы можете использовать 'shutil.copy (line, '.')' Вместо 'call (['cp', line, '.'])'. – jfs