如何读取argv值而无需转义string?

我正在写一个名为flac2m4apython脚本,它调用ffmpeg将.flac文件转换为.m4a文件。 核心程序是这样的:

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

我可以使用这样的程序:

 ./flac2m4a path_to_the_song.flac 

但是当我用一些特殊字符的名字来运行它时,

 ./flac4m4a.py Justin\ Bieber\ -\ Never\ Say\ Never\ -\ The\ Remixes/01\ -\ Never\ Say\ Never\ \(feat.\ Jaden\ Smith\).flac 

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

 Justin Bieber - Never Say Never - The Remixes/01 - Never Say Never (feat. Jaden Smith).flac 

所以我只是想知道如何阅读argv[1]完全按照用户input(与这些\

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

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

你真正要求的是不可能的,因为当shell执行解析时,在命令行输入的内容会丢失。 shell解析特殊字符并将结果传递给python。 在python获取字符串的时候,所有的特殊字符都被处理并抛弃了。 也就是说,这不是bash的错,而是bash(和其他大多数shell)的设计。

./flac4m4a.py Justin \ Bieber \ – \ Never \ Say \ Never \ – \ The Remixes / 01 \ – \ Never \ Say \ Never \(feat。\ Jaden \ Smith).flac

上述命令中的'\'用于转义'','('和')',即等于

./flac4m4a.py'贾斯汀比伯 – 永不言败 – 混音/ 01 – 永不言败(壮举。史密斯).flac'

你的python程序永远不会在其argv [1]中看到'\'。

如果你真的需要在每个''之前,'('和')',你可以很容易地添加到你的Python程序。