如何在不转义字符串的情况下读取argv值?

won*_*ng2 2 python linux

我正在编写一个名为flac2m4a的python脚本,它调用ffmpeg将.flac文件转换为.m4a文件.核心计划是这样的:

cmd = "ffmpeg -i %s -acodec alac %s.m4a" % (sys.argv[1], sys.argv[1][:-5])
os.system(cmd)
Run Code Online (Sandbox Code Playgroud)

我可以像这样使用这个程序:

./flac2m4a path_to_the_song.flac  
Run Code Online (Sandbox Code Playgroud)

但是当我为他们名字中带有特殊字符的歌曲运行时:

./flac4m4a.py Justin\ Bieber\ -\ Never\ Say\ Never\ -\ The\ Remixes/01\ -\ Never\ Say\ Never\ \(feat.\ Jaden\ Smith\).flac
Run Code Online (Sandbox Code Playgroud)

在linux下,当我按Tab键自动完成时,特殊字符将被转义为a \,但是当我从中读取它时sys.argv[1],它们将被Python转换为普通字符串:

Justin Bieber - Never Say Never - The Remixes/01 - Never Say Never (feat. Jaden Smith).flac
Run Code Online (Sandbox Code Playgroud)

所以我只想知道如何argv[1]准确读取用户输入的内容(带有那些\)

Sve*_*ach 6

虽然可以为shell引用一个字符串,但是您不应该首先使用shell来执行命令,因此不需要引用任何引号.使用subprocess.call()而不是os.system():

subprocess.call(["ffmpeg", "-i", sys.argv[1], "-acodec", "alac",
                 sys.argv[1][:-5] + ".m4a"])
Run Code Online (Sandbox Code Playgroud)