编写python脚本来运行shell脚本?

2024-09-30 20:19:08 发布

您现在位置:Python中文网/ 问答频道 /正文

我运行svn状态得到修改的文件:

  svn status
  ?       .settings
  ?       .buildpath
  ?       .directory
  A       A.php
  M       B.php
  D       html/C.html
  M       html/D.fr
  M       api/E.api
  M       F.php
  ..

在我想保留所有这些文件之后

zcvf MY.tar.gz all files that svn stat display (不包括?只有M,A,D)

我的想法是创建一个可以运行shell的python脚本,因为现在我只需要逐个复制文件名。在

zcvf MY.tar.gz all the files that we run svn stat

有谁可以指导如何做这个或一些相关的教程?但如果你认为我会忽略我的努力?在

谢谢


Tags: 文件apithatmy状态htmlstatussvn
3条回答

如果可以在shell中的一行代码中完成,我不明白为什么要使用python。在

svn status | grep "^[AMD]" | sed 's/^.\{8\}//' | xargs zcvf My.tar.gz

我使用grep来只选择修改过的行,如果您想要svn status列出的所有文件(也包括那些添加/删除的文件),则可以不使用该部分。我在这里用sed删除了每一行的第一部分,我相信有更简单的方法可以做到这一点,但我现在想不出一个。在

您可以使用^{}^{}函数:

#!/usr/bin/env python
from subprocess import check_call, check_output as qx

filenames = [line[8:] # extract filename
             for line in qx(['svn', 'status']).splitlines()
             if not line.startswith('?')] # exclude files that are not under VC
check_call(['tar', 'cvfz', 'MY.tar.gz'] + filenames)

在Python<;2.7上,请参见^{} recipe。在

一旦你把你的命令写成一个字符串,你就可以用子进程来调用它

subprocess

此模块生成称为进程并允许您控制它们。从那以后就看你了。在

相关问题 更多 >