我有一个文件目录,其名称中有空格,我有一个python脚本加载这些文件并对它们运行tail -n1
命令,但由于名称中有空格,因此失败。例如。
我有一个带有以下文件的目录
data from_10_13_2014 09_00_45.json
我的脚本包含以下行line = os.popen("tail -n1 %s" % files).read()
截至目前,我收到以下错误
tail: cannot open ‘/home/dataserver/Development/Test/data’ for reading: No such file or directory
tail: cannot open ‘from_10_13_2014’ for reading: No such file or directory
tail: cannot open ‘09_00_45.json’ for reading: No such file or directory
我现在的解决方法是用_
替换空格有没有办法在不重命名文件的情况下做到这一点?
答案 0 :(得分:2)
尝试使用"tail -n1 %r"
,它将使用字符串的字符串表示形式,即tail -n1 "data from_10_13_2014 09_00_45.json"
。
甚至更好,切换到使用subprocess模块。在这里,您可以使用subprocess.check_output
函数自动转义参数:
tail_line = subprocess.check_output(["tail", "-n1", files])
我建议你不要在文件名中使用空格,最终它最终会破坏脚本。也许您可以编写第二个脚本来规范化您的文件名?
答案 1 :(得分:0)
将替换为
\
中的
files
。所以反斜杠+空格。
答案 2 :(得分:0)
问题在于您依赖于popen
来为您解析命令行,当然,它使用空格来进行一些解析。一个更好的解决方案是建立一个单独的参数列表,这样就不会发生命令行解析。
最简单的方法是使用subprocess.check_output:
line = subprocess.check_output(["tail", "-n1", "/tmp/junk.py"])