Lỗi với subprocess trong Python

Tình hình mình có viết cái hàm nhỏ để lấy tổng thời gian của một video tính bằng giây sử dụng subprocess trong Python và MediaInfo .
Thực ra thì nó có một thư viện cho việc này nhưng mình chỉ muốn lấy tổng thời gian của một Video nên không muốn kéo nguyên một thư viện mà code một hàm riêng :heart_eyes:

def Get_video_stream_duration(path_input,path_mediainfo="mediainfo"):
    def run_mediainfo():
        if platform.system()=='Linux':
            cmd="'{}' --Inform=\"Video;%Duration%\" '{}'".format(path_mediainfo,path_input)
        elif platform.system()=='Windows':
            cmd="\"{}\" --Inform=\"Video;%Duration%\" \"{}\"".format(path_mediainfo,path_input)
        else:
            print("You system not support by this script \n System support: \n -Linux -Windows")
            return False
        try:
           
            result = subprocess.run(cmd,shell=True,stdout=subprocess.PIPE)
            print(result.stdout)
            result=''.join([n for n in str(result.stdout) if n.isdigit()])
            return (int(result)/1000000)
           
        except :
            print("Somthing wrong.Please check ! \n Video cannot read or other problems")
            return False  
    path_input=os.path.normpath(path_input)
    if os.path.exists(path_input)==True:
        if is_video_file(path_input)==True:
            if path_mediainfo=="mediainfo":
                if shutil.which(path_mediainfo)!=None:
                    return run_mediainfo()
                path_mediainfo=Get_MediaInfo()
                return run_mediainfo
            path_mediainfo=path_mediainfo
            return run_mediainfo()
    return False

Và hàm Get_MediaInfo để tải và cài đặt Media Info trong trường hợp trên máy chưa cài !

def Get_MediaInfo(path_dir="./MediaInfo"):
    if platform.system()=='Windows':
                if os.path.exists(path_dir+"/MediaInfo.exe")==True:
                    return path_dir+"/MediaInfo.exe"
                else :    
                    os.makedirs(path_dir)
                    if os.path.exists(path_dir)!=True:
                      print("Cannot create folder to download MediaInfo \n Please check! ")
                      return False
                url_file="https://github.com/Kulteam/AutoLazy/blob/main/mediainfo/win/MediaInfo_CLI_21.09_Windows_i386.zip?raw=true"
                filename=Download_file_from_direct_link(url_file,path_folder=path_dir)
                while get_digest(filename)!="a8341a4b3db85d55d5ee81b0978b3d801eb221a14f15d0487f92fb7f387a446b":
                    filename=Download_file_from_direct_link(url_file,path_folder=path_dir)
                shutil.unpack_archive(filename,path_dir)
                cmd="set PATH %PATH%;"+path_dir
                subprocess.run(cmd,shell=True)
                if shutil.which("mediainfo")!=None:
                       print("Install  MediaInfo  on your Windows computer is successfully")
                       return os.path.normpath(path_dir+"/mediainfo")
                else:
                        print("Somthing wrong while try to install MediaInfo on your Windows computer")  
                        return False    
   
    if platform.system()=='Linux':  
                if os.path.exists(path_dir+"/mediainfo")==True:
                    if os.access(path_dir+"/mediainfo", os.X_OK)!=True:
                        try:
                            path_file=path_dir+"/mediainfo"
                            os.chmod(path_file, 0o777)
                        except:
                            print("Cannot Chmod File \"mediainfo\" \n Please check! ")
                            return False
                    return os.path.normpath(path_dir+"/mediainfo")
                else :    
                    os.makedirs(path_dir)
                    if os.path.exists(path_dir)!=True:
                        print("Cannot create folder to download MediaInfo \n Please check! ")
                        return False
                    url_file="https://github.com/Kulteam/AutoLazy/blob/main/mediainfo/linux/MediaInfo_CLI_21.09_Linux_Portal_x64.zip?raw=true"
                    filename=Download_file_from_direct_link(url_file,path_folder=path_dir)
                    while get_digest(filename)!="fdf7d301597fd9bbc0092acc67d5b053485279e9c072e50903357e91ee01804e":
                        filename=Download_file_from_direct_link(url_file,path_folder=path_dir)
                    shutil.unpack_archive(filename,path_dir)
                    #Set path lib on Linux
                    path_lib="LD_LIBRARY_PATH=$LD_LIBRARY_PATH:{}/.libs".format(path_dir)
                    export="export LD_LIBRARY_PATH"
                    subprocess.run(path_lib,shell=True)  
                    subprocess.run(export,shell=True)  
                    chmod="chmod -R +x {}".format(path_dir)      
                    subprocess.run(chmod,shell=True)
                    #set_path="export PATH=$PATH:{}/mediainfo".format(path_dir)
                    #subprocess.run(set_path,shell=True)
                    if os.path.exists(path_dir+"/mediainfo")==True:
                       print("Install MediaInfo on your Linux computer is successfully")
                       return os.path.normpath(path_dir+"/mediainfo")
                    else:
                        print("Somthing wrong while try to install MediaInfo on your Linux computer")  
                        return False  
    else:
        print("Your system computer not support by this Script \n System Support: \n -Windows \n -Linux ")
        return False

Khi mình chạy

print(Get_video_stream_duration("Sabai - Million Days (Official Lyric Video) ft. Hoang & Claire Ridgely-fVeD9vWCpZ8.mkv"))

thì bị lỗi :

<function Get_video_stream_duration.<locals>.run_mediainfo at 0x7f902cf28510>

Trước đó thì nó cũng bị lỗi này , mình đã fix và đã chạy bình thường mà không hiểu sao giờ nó lại lặp lại lỗi này …Thật hết nói lun :rofl: :rofl: :rofl:
Hi vọng ai đó có thể giúp :stuck_out_tongue_winking_eye:

Cái này không phải là lỗi mà bạn đang trả về 1 hàm thôi. Do chỗ này nè:

Thiếu () đó trời ơi :kissing:

6 Likes

Thanks nhé…
Thế mà mắt mũi thế nào mà nhìn k ra :rofl:

Thực ra không chỉ là mắt mũi, mà còn là kinh nghiệm nữa.

Lần sau khi thấy những dòng in thế này thì biết là nó call tới object chứ không phải call hàm nhé. Bạn có thể thử nghiệm vài thể loại khác để dễ hình dung hơn.

2 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?