我将使用argparse,因为您可以指定乱序操作:
https://docs.python.org/3/library/argparse.html
,
如果您不想使用argparse
,或者不能出于分配目的,则可以查看sys.argv
内:
is_recursive = any(arg == '-r' for arg in sys.argv)
# `paths` will be a list of all other arguments
paths = [arg for arg in sys.argv if arg != '-r']
,
定义一个解析函数,该函数查找'-r'字符串:
def parse(alist,astr='-r'):
try:
idx = alist.index(astr)
r = alist.pop(idx)
return True,alist
except ValueError:
return False,alist
如果这样做
import sys
r,rest = parse(sys.argv[1:])
应为r
给出True / False值,并提供文件名列表。使用其余代码。
测试:
In [326]: list1 = 'rm.py /path/to/some/file ./somefile someotherfile'.split()
In [329]: r,rest = parse(list1[1:])
In [330]: r,rest
Out[330]: (False,['/path/to/some/file','./somefile','someotherfile'])
In [331]: list2 = 'rm.py /path/to/some/file ./somefile someotherfile -r'.split()
In [332]: r,rest = parse(list2[1:])
In [333]: r,rest
Out[333]: (True,'someotherfile'])
为了说明当出现“ -r”时会发生什么:
In [335]: list2.index('-r')
Out[335]: 4
In [336]: list2.pop(4)
Out[336]: '-r'
In [337]: list2
Out[337]: ['rm.py','/path/to/some/file','someotherfile']
如果不存在,我们会得到一个ValueError
:
In [338]: list1.index('-r')
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-338-807fbe60be44> in <module>
----> 1 list1.index('-r')
ValueError: '-r' is not in list
======
使用argparse
的等效功能:
In [339]: import argparse
In [340]: parser = argparse.ArgumentParser()
In [341]: parser.add_argument('-r',action='store_true',help='recursive flag');
In [342]: parser.add_argument('rest',nargs='*',help='file names');
In [343]: args = parser.parse_args(list1[1:])
使用args = parser.parse_args()
来读取sys.argv
。
结果是一个namespace
对象,该对象具有所需的属性:
In [344]: args
Out[344]: Namespace(r=False,rest=['/path/to/some/file','someotherfile'])
In [345]: args.r
Out[345]: False
In [346]: args.rest
Out[346]: ['/path/to/some/file','someotherfile']
以与上述args.r
和args.rest
相同的方式使用r
和rest
。
'-r'可以在文件名列表之前或之后。当您想定义更多选项(例如,-r)时,argparse
变得更加有用。它还负责显示帮助消息和有意义的错误。
In [347]: parser.parse_args(['--help'])
usage: ipython3 [-h] [-r] [rest [rest ...]]
positional arguments:
rest file names
optional arguments:
-h,--help show this help message and exit
-r recursive flag
,
为什么不使用:
os.system( 'rm ' + ' '.join( sys.argv[1:] )
并完成它。
本文链接:https://www.f2er.com/3147054.html