Sil*_*eed 16 python perl command-line language-features
我知道python -c '<code>',但我想知道是否有更优雅的python相当于perl -pi -e '<code>'.我仍然在整个目录(perl -pi -e s/foo/bar/g *甚至find . | xargs perl -pi -e s/foo/bar/g是子目录)中查找和替换它等相当多的东西.
我实际上觉得Perl Perl(自由形式Tim Toady-ness)使得perl -pi -e工作如此出色,而使用Python你必须做一些导入re模块,创建re实例然后捕获的东西stdin,但也许有一个Python快捷方式可以完成所有这些并且我错过了它(非常想念它)...
Jon*_*ler 10
来自' python -h' 的命令行用法肯定强烈表明没有这样的等价物.Perl倾向于广泛使用' $_'(你的例子隐式使用它),我不认为Python支持任何类似的概念,从而使得Perl单行的Python等价物变得更加困难.
S.L*_*ott 10
等效于-pi并不难用Python编写.
使用您真正喜欢的-p和-i功能为自己编写一个方便的模块.我们称之为pypi.py.
使用 python -c 'import pypi; pypi.subs("this","that")'
您可以使用fileinput模块实现基本的-p循环.
你有一个函数,subs它实现了打开文件,保存备份副本以及在每一行上进行替换的基本"-i"算法.
有一些像这样的activestate食谱.这里有一些:
不是内置的.但写起来并不难.而且一旦写好易于定制.
我知道这已经太晚了几年,但我最近发现了一个非常好的工具叫做pyp,它正是你所要求的.
我认为你的命令应该是:
pyp "p.replace('foo','bar')"
Run Code Online (Sandbox Code Playgroud)
我认为perl更适合这种动态脚本.如果你想快速实现一次性脚本编写功能,我建议坚持使用perl,awk,sed和标准的unix命令行工具.
但是如果你对使用python感兴趣,我使用optparse编写自己的命令行工具并推荐它.optparse提供了一个简洁易用的命令行选项解析器,内置帮助生成.
这是一个示例:
def myfunc(filename, use_versbose):
# function code
if __name__ == '__main__':
from optparse import OptionParser
parser = OptionParser()
parser.add_option("-f", "--file", dest="filename",
help="write report to FILE", metavar="FILE")
parser.add_option("-q", "--quiet",
action="store_false", dest="verbose", default=True,
help="don't print status messages to stdout")
(options, args) = parser.parse_args()
if options.filename:
myfunc(options.filename, options.verbose)
else:
print 'ERROR -- Necessary command line options not given!'
print parser.print_help()
Run Code Online (Sandbox Code Playgroud)
parser.print_help()生成以下输出,并在命令行中给出-h或--help时自动显示:
usage: <yourscript> [options]
options:
-h, --help show this help message and exit
-f FILE, --file=FILE write report to FILE
-q, --quiet don't print status messages to stdout
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2787 次 |
| 最近记录: |