Python 创建文本文件不解析换行符

1 投票
1 回答
807 浏览
提问于 2025-04-18 12:46

我刚开始学习Python,正在写一个脚本,这个脚本会运行valgrind,并处理文件夹里的所有二进制文件,抓取输出结果,并在需要检查结果时创建一个文本文件。我的问题是,我能获取到输出,但当我打印它或者写入一个新文件时,\n这个字符没有被正确识别,显示成两个字符,而不是应该换行的效果。

我如何抓取输出

proc.append(subprocess.Popen(
        ['valgrind','--track-origins=yes','--leak-check=full',''.join(['./',files[i]])],
        stdout=subprocess.PIPE,
        stderr=subprocess.STDOUT,
        universal_newlines=True,
        shell=False,
        ))
    print '--> valgrind on', files[i]
    stdout_value.append(proc[j].communicate())

我如何写入新文件

        file = open(''.join([os.getcwd(),'/valgrind_output_dir/',result4.group(1),'_output.txt']), "w")
    file.write(str(stdout_value[i]))

谢谢你告诉我我哪里做错了!

1 个回答

0

试试这个:

import subprocess
with open("file", "wb") as new_file:
    proc = []
    proc.append(subprocess.Popen(
            ["ls", "-l"],
            stdout=subprocess.PIPE,
            stderr=subprocess.STDOUT,
            universal_newlines=True,
            shell=False,
            ))
    new_file.write(proc[0].communicate()[0])

可能的问题是:proc[0].communicate() => (文本, 无)

Popen.communicate(input=None)

这个方法是用来和一个正在运行的程序进行互动的:你可以给它发送数据,读取它的输出和错误信息,直到程序结束。

它会等这个程序执行完毕。你可以选择性地给它一个输入参数,这个参数应该是你想发送给子程序的字符串,如果不想发送任何数据,就可以用None。

communicate() 方法会返回一个元组 (标准输出数据, 错误输出数据)

撰写回答