我正在尝试在Python 3应用程序中使用argparse,其中有明确的选择列表,但如果没有指定,则为默认值.
我的代码是:
parser.add_argument('--list', default='all', choices=['servers', 'storage', 'all'], help='list servers, storage, or both (default: %(default)s)')
args = parser.parse_args()
print(vars(args))
Run Code Online (Sandbox Code Playgroud)
但是,当我运行它时,我得到以下选项:
$ python3 ./myapp.py --list all
{'list': 'all'}
Run Code Online (Sandbox Code Playgroud)
或者没有选项:
$ python3 ./myapp.py --list
usage: myapp.py [-h] [--list {servers,storage,all}]
myapp.py: error: argument --list: expected one argument
Run Code Online (Sandbox Code Playgroud)
我在这里错过了什么吗?或者我可以没有指定选项的默认值吗?
我正在运行一个备份脚本,启动子进程以通过rsync执行备份.但是我无法限制它一次启动的rsyncs的数量.
这是我目前正在处理的代码:
print "active_children: ", multiprocessing.active_children()
print "active_children len: ", len(multiprocessing.active_children())
while len(multiprocessing.active_children()) > 49:
sleep(2)
p = multiprocessing.Process(target=do_backup, args=(shash["NAME"],ip,shash["buTYPE"], ))
jobs.append(p)
p.start()
Run Code Online (Sandbox Code Playgroud)
当我运行数百个rsyncs时,这显示最多一个孩子.这是实际启动rsync的代码(来自do_backup函数内部).command是包含rsync行的变量:
print command
subprocess.Popen(command, stdout=subprocess.PIPE, shell=True)
return 1
Run Code Online (Sandbox Code Playgroud)
如果我向do_backup函数添加sleep(x),它将在睡眠时显示为活动子项.另外,进程表被显示为具有1我是从这个是rsync的分裂关闭,不再是蟒蛇的孩子,让我的子进程死,所以我不能再指望它假设PPID rsync的过程.有没有人知道如何保持python子活着并被计算直到rsync完成?
python multithreading multiprocessing python-multithreading python-multiprocessing