import subprocess
cmd = 'tasklist'
proc = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE)
file = open("Process_list.txt", "r+")
for line in proc.stdout:
        file.write(str(line))

file.close()

Я просто написал сохранение списка процессов в текстовый файл. Но в файле Process_list.txt много символов перевода строки, например \ r \ n. Как я могу удалить это? Я использовал заменить и лишить func прежде

2
Jason 6 Янв 2017 в 05:51

3 ответа

Лучший ответ

Проблема может быть не столько в replac вставке или strip проверке дополнительных символов, сколько в том, что возвращается при запуске subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE). Последний фактически возвращает bytes, что может не так хорошо воспроизводиться при записи каждой строки в файл. Вы должны иметь возможность преобразовать bytes в string перед записью строк в файл следующим образом:

import subprocess
cmd = 'tasklist'
proc = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE)
file = open("Process_list.txt", "r+")
for line in proc.stdout:
        file.write(line.decode('ascii')) # to have each output in one line

file.close()

Если вы не хотите, чтобы каждый вывод был в одной строке, вы можете зачеркнуть символы новой строки с помощью file.write(line.decode('ascii').strip()).

Более того, вы могли бы фактически использовать subprocess.getoutput для получения вывода строковых символов и сохранения результатов в свой файл:

cmd = 'tasklist'
proc = subprocess.getoutput(cmd)
file.write(proc)
file.close()

Я надеюсь, что это окажется полезным.

3
Abdou 9 Янв 2017 в 00:56

Возможно, вы ищете str.rstrip (). Удаляет завершающие символы новой строки и возврата каретки; тем не менее, он также удаляет все завершающие пробелы, так что имейте это в виду.

1
Thelmund 6 Янв 2017 в 03:15

Вы действительно будете использовать strip() еще раз:

In [1]: 'foo\r\n'.strip()
Out[1]: 'foo'

В твоем случае:

file.write(str(line).strip())

Вы также можете избежать close() вашего файла, используя with:

with open("Process_list.txt", "r+") as file:
    for line in proc.stdout:
        file.write(str(line).strip())

Также обратите внимание, что str() необходим только для line, который еще не является строкой.

1
elethan 6 Янв 2017 в 03:11