我正在寻找在python中使用bash命令的最佳方法。有什么方法?我知道os.system和subprocess.Popen。
我试过这些:
bootfile = os.system("ls -l /jffs2/a.bin | cut -d '/' -f 4")
print bootfile
这会按预期返回a.bin,但之后也会返回0,因此打印:
a.bin
0
现在将bootfile设置为0.下次我打印bootfile时它只显示为0.我猜这是退出值,如何阻止此值干扰?
我也尝试过:
bootfile = subprocess.Popen("ls -l /jffs2/a.bin | cut -d '/' -f 4")
print bootfile
但似乎打破了剧本,因为我根本没有得到任何回报,我做到了吗?
还有哪些更好,为什么?还有其他方式,首选方式是什么?
答案 0 :(得分:3)
使用os.readlink
(由@kojiro提出)和os.path.basename
仅获取名称文件:
os.path.basename(os.readlink('/jffs2/a.bin'))
答案 1 :(得分:2)
os.readlink
的评论可能就是你想要的。
我正在解释你想要实施的内容。
os.system
会返回命令运行的退出状态。
subprocess.Popen
将创建一个管道,以便您可以捕获命令运行的输出
下面的行将捕获命令运行的输出:
bootfile = subprocess.Popen(["bash","-c","ls -l /jffs2/a.bin | cut -d '/' -f 4"], stdout=subprocess.PIPE).communicate()[0]
的更多详情
答案 2 :(得分:1)
正如@kojiro所说,正确答案是:
os.readlink('/jffs2/a.bin')
但如果你真的想以复杂的方式做到这一点,那么在Python 2.7中:
cmd = "ls -l /jffs2/a.bin | cut -d '/' -f 4"
bootfile = subprocess.check_output(cmd, shell=True)
或者在古老的蟒蛇身上:
cmd = "ls -l /jffs2/a.bin | cut -d '/' -f 4"
p = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE)
bootfile = p.communicate()[0]
if p.returncode != 0:
raise Exception('It failed')