在单个脚本中组合多个shell脚本,sed和用户输入

时间:2015-03-01 00:25:04

标签: python bash shell sed

目前我正在使用两个单独的shell脚本来完成工作。

1)列出当前目录并将其保存为.html文件(首先列出根目录,然后列出完整列表)

tree -L 1 -dH ./ >> /Volumes/BD/BD-V1.html && tree -H ./ >> /Volumes/BD/BD-V1.html

2)使用sed删除不需要的行(我在mac上)

sed -i '' '/by Francesc Rocher/d' /Volumes/BD/BD-V1.html && sed -i '' '/by Steve Baker/d' /Volumes/BD/BD-V1.html  && sed -i '' '/by Florian Sesser/d' /Volumes/BD/BD-V1.html

现在我想将它们组合为一个脚本,并为文件路径提供用户输入。我试图用python做但没有成功

import subprocess
subprocess.call(["tree", "-d", "-L", "1"])

上面的列表可以列出目录,但是我无法保存输出(我必须在python中执行此操作),我尝试了类似的东西,但没有工作。

 file = open('out.txt', 'w')
 import subprocess
 variation_string = subprocess.call(["tree", "-d", "-L", "1"])  
 file.write(variation_string)
 file.close()

此外,我不确定如何实施sed :(

编辑:我是初学者

2 个答案:

答案 0 :(得分:1)

您可以简单地将标准输出重定向到文件对象:

from subprocess import check_call

with open("out.txt","w") as f:
    check_call(["tree", "-d", "-L", "1"],stdout=f)

在您的代码中,您基本上是在尝试编写return code,因为调用将返回到文件,这会引发错误,因为write需要一个字符串。如果要存储运行命令的输出,可以使用check_output

答案 1 :(得分:-1)

您可以使用子进程模块执行此操作。您可以创建另一个运行命令的进程,然后与之通信。这将为您提供输出。

import subprocess
file = open('out.txt', 'w')
...
command = "tree -d -L 1"
process = subprocess.Popen(command.split(), stdout=subprocess.PIPE)
output = process.communicate()[0]
...
file.write(output)
file.close()