gpt4 book ai didi

Python子进程 "object has no attribute ' fileno'”错误

转载 作者:太空狗 更新时间:2023-10-29 21:33:07 25 4
gpt4 key购买 nike

此代码在使用 Python 2.5.1 运行时生成“AttributeError: 'Popen' object has no attribute 'fileno'”

代码:

def get_blame(filename): 
proc = []
proc.append(Popen(['svn', 'blame', shellquote(filename)], stdout=PIPE))
proc.append(Popen(['tr', '-s', r"'\040'"], stdin=proc[-1]), stdout=PIPE)
proc.append(Popen(['tr', r"'\040'", r"';'"], stdin=proc[-1]), stdout=PIPE)
proc.append(Popen(['cut', r"-d", r"\;", '-f', '3'], stdin=proc[-1]), stdout=PIPE)
return proc[-1].stdout.read()

堆栈:

function walk_folder in blame.py at line 55
print_file(os.path.join(os.getcwd(), filename), path)

function print_file in blame.py at line 34
users = get_blame(filename)

function get_blame in blame.py at line 20
proc.append(Popen(['tr', '-s', r"'\040'"], stdin=proc[-1]), stdout=PIPE)

function __init__ in subprocess.py at line 533
(p2cread, p2cwrite,

function _get_handles in subprocess.py at line 830
p2cread = stdin.fileno()

这段代码应该可以在 python 文档中描述 this usage .

最佳答案

三件事

首先,你的 () 是错误的。

其次,subprocess.Popen() 的结果是一个进程对象,而不是一个文件。

proc = []
proc.append(Popen(['svn', 'blame', shellquote(filename)], stdout=PIPE))
proc.append(Popen(['tr', '-s', r"'\040'"], stdin=proc[-1]), stdout=PIPE)

proc[-1] 的值不是文件,而是包含文件的进程。

proc.append(Popen(['tr', '-s', r"'\040'"], stdin=proc[-1].stdout, stdout=PIPE))

第三,不要在 shell 中执行所有 trcut 垃圾操作,几乎没有什么比这更慢的了。用 Python 编写 trcut 处理 - 它更快更简单。

关于Python子进程 "object has no attribute ' fileno'”错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/777996/

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