Python如何将mymodule.py的用户输入传递给check_avail.py使用
解决方案
第一步:修改check_avail.py,避免导入时自动执行输入逻辑
你现有代码的核心问题是check_avail.py末尾的输入、调用代码是全局生效的,只要其他脚本导入它,就会自动触发输入要求,无法接收外部传入的参数。需要把这部分代码移到if __name__ == "__main__"判断块内,修改后完整代码如下:
from pytube import YouTube if __name__ == "__main__": def video(url,path): y = YouTube(url) print("Successfully done") return video # 把原来全局的输入、调用逻辑移到主程序判断内 url = input("Enter input url here: ") path = input("Enter path here: ") video(url,path) else: def check(func): def parameters(u,v): print(f"title:{YouTube(u).title}, views:{YouTube(u).views}, Length:{YouTube(u).length}") return func(u,v) return parameters def filtering(func): def param(u,v): check1 = YouTube(u).streams.filter(type='video',progressive=True,file_extension='mp4') print(check1) return func(u,v) return param @filtering @check def video(url,path): y = YouTube(url) print("Success") return video
第二步:修改mymodule.py,导入模块后传入参数调用
取消check_avail导入的注释,在需要的位置传入已经拿到的url和path参数即可,修改后完整代码如下:
from pytube import YouTube import pytube import check_avail class vdodownload: def __init__(self,url,path): self.url = url self.path = path def link(self): try: print(f'Downloading video: {YouTube(self.url).title}') # 传入当前类存储的url和path给check_avail的video方法 yt = check_avail.video(self.url,self.path) YouTube(self.url).streams.first().download(self.path) print(f'Downloaded video: {YouTube(self.url).title}') except pytube.exceptions.ExtractError: print(f'Video {self.url} is unavaialable, skipping.') url = input("Enter the video URL: ") path = input("Enter the path: ") t = vdodownload(url,path) t.link()
运行逻辑说明
- 直接运行
check_avail.py时,会触发自身的输入提示,走单独运行的逻辑 - 运行
mymodule.py时,先拿到用户输入的url、路径,实例化类后调用link方法时,会自动把两个参数传给check_avail.py的video方法执行,不需要再重复输入
内容的提问来源于stack exchange,提问作者shaila
相关产品推荐
相关产品推荐

