我正在编写一个名为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]准确读取用户输入的内容(带有那些\)
虽然可以为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)