gpt4 book ai didi

python - 无法读取使用不同方法写入的文件的内容

转载 作者:行者123 更新时间:2023-12-01 08:06:00 25 4
gpt4 key购买 nike

我想读取通过不同函数写入文件的文件内容

from subprocess import *
import os
def compile():
f=open("reddy.txt","w+")
p=Popen("gcc -c rahul.c ",stdout=f,shell=True,stderr=STDOUT) #i have even tried with with open but it is not working,It is working with r+ but it is appending to file.
f.close()

def run():
p1=Popen("gcc -o r.exe rahul.c",stdout=PIPE,shell=True,stderr=PIPE)
p2=Popen("r.exe",stdout=PIPE,shell=True,stderr=PIPE)
print(p2.stdout.read())
p2.kill()

compile()
f1=open("reddy.txt","w+")
first_char=f1.readline() #unable to read here ….!!!!!!
print(first_char)

#run()

first_char 必须具有文件 reddy.txt 的第一行,但它显示为 null

最佳答案

您假设 Popen 完成该过程,但事实并非如此; Popen 只会启动一个进程 - 除非编译速度快,否则很可能 reddy.txt当您尝试读取它时,它将是空的。

使用 Python 3.5+,您需要 subprocess.run()

# Don't import *
from subprocess import run as s_run, PIPE, STDOUT
# Remove unused import
#import os

def compile():
# Use a context manager
with open("reddy.txt", "w+") as f:
# For style points, avoid shell=True
s_run(["gcc", "-c", "rahul.c "], stdout=f, stderr=STDOUT,
# Check that the compilation actually succeeds
check=True)

def run():
compile() # use the function we just defined instead of repeating youself
p2 = s_run(["r.exe"], stdout=PIPE, stderr=PIPE,
# Check that the process succeeds
check = True,
# Decode output from bytes() to str()
universal_newlines=True)
print(p2.stdout)

compile()
# Open file for reading, not writing!
with open("reddy.txt", "r") as f1:
first_char = f1.readline()
print(first_char)

(我按照同样的思路调整了 run() 函数,尽管它没有在您发布的任何代码中使用。)

first_char 的命名有误导性; readline() 将读取整行。如果您只想要第一个字节,请尝试

first_char = f1.read(1)

如果您需要与旧版 Python 兼容,请尝试 check_outputcheck_call 而不是 run。如果您使用的是 3.7+,则可以使用 text=True 而不是旧的且稍有误导性的名称 universal_newlines=True

有关我所做更改的更多详细信息,另请参阅 this .

关于python - 无法读取使用不同方法写入的文件的内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55528743/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com