tf.app.flags

解析命令行参数。

1. /usr/local/lib/python2.7/dist-packages/tensorflow/python/platform/flags.py

"""Implementation of the flags interface."""
from __future__ import absolute_import
from __future__ import division
from __future__ import print_functionimport argparse as _argparsefrom tensorflow.python.platform import tf_logging as _logging
from tensorflow.python.util.all_util import remove_undocumented_global_parser = _argparse.ArgumentParser()......

文件中 import argparse,使用 argparse 需要创建一个解析器对象,告诉它将会有些什么参数。当程序运行时,解析器可以用于处理命令行参数。argparse 中的解析器类是 ArgumentParser

_global_parser = _argparse.ArgumentParser()# pylint: disable=invalid-nameclass _FlagValues(object):"""Global container and accessor for flags and their values."""def __init__(self):self.__dict__['__flags'] = {}self.__dict__['__parsed'] = Falseself.__dict__['__required_flags'] = set()def _parse_flags(self, args=None):result, unparsed = _global_parser.parse_known_args(args=args)for flag_name, val in vars(result).items():self.__dict__['__flags'][flag_name] = valself.__dict__['__parsed'] = Trueself._assert_all_required()return unparseddef __getattr__(self, name):"""Retrieves the 'value' attribute of the flag --name."""try:parsed = self.__dict__['__parsed']except KeyError:# May happen during pickle.load or copy.copyraise AttributeError(name)if not parsed:self._parse_flags()if name not in self.__dict__['__flags']:raise AttributeError(name)return self.__dict__['__flags'][name]def __setattr__(self, name, value):"""Sets the 'value' attribute of the flag --name."""if not self.__dict__['__parsed']:self._parse_flags()self.__dict__['__flags'][name] = valueself._assert_required(name)def _add_required_flag(self, item):self.__dict__['__required_flags'].add(item)def _assert_required(self, flag_name):if (flag_name not in self.__dict__['__flags'] orself.__dict__['__flags'][flag_name] is None):raise AttributeError('Flag --%s must be specified.' % flag_name)def _assert_all_required(self):for flag_name in self.__dict__['__required_flags']:self._assert_required(flag_name)def _define_helper(flag_name, default_value, docstring, flagtype):"""Registers 'flag_name' with 'default_value' and 'docstring'."""_global_parser.add_argument('--' + flag_name,default=default_value,help=docstring,type=flagtype)# Provides the global object that can be used to access flags.
FLAGS = _FlagValues()

定义全局对象解析器类 _global_parser,定义 class _FlagValues(object) 类解析命令行,result, unparsed = _global_parser.parse_known_args(args=args) 返回一个有用的 result 和一个无用的 unparsedparse_known_args 函数在接受到多余的命令行参数时不会报错,会原封不动的以一个 list 形式将其返回。函数返回的 result 是参数解析完的数据,而 unparsed 是那些未被解析的参数 list

将命令行传入的命令和数据解析出来以字典的形式放到 self.__dict__['__flags'] 字典中,这样当要访问命令行输入的命令时,就能使用 tf.app.flag.Flags 这样的命令了。在 tensorflow 中是通过 tf.app.flag.Flags 来实现实例化这个类,然后再调用里面解析得到的参数即可。

setattr / getattr 方法是一些设置和获得解析的命令行参数的方法。在获得参数的时候 (getattr),首先要通过解析字典中的 parsed = self.__dict__['__parsed'] 来检验参数是否已经被解析过,因为在 _parse_flags 方法中,只要解析过参数 (也即是运行过该函数),那么 self.__dict__['__parsed'] 就会为 True (表明解析过参数)。因为这里是获取参数,所以除了要判断参数是否在字典里的基本要求外,还要判断有没有解析过参数,没有就运行 self._parse_flags() 解析参数。

类外定义的方法,要调用就只能通过 tf.app.flags.XXX 来实现了。

def _define_helper(flag_name, default_value, docstring, flagtype):"""Registers 'flag_name' with 'default_value' and 'docstring'."""_global_parser.add_argument('--' + flag_name,default=default_value,help=docstring,type=flagtype)

_define_helper 函数中调用了 _global_parser.add_argument 完成对命令行 optional argument 的添加,_global_parser 就是前面参数解析器的一个实例。真正完成对命令行参数添加是在 _define_helper 中的 _global_parser.add_argument 函数。第一个参数时 '--' + flag_name 表示我们定义的命令行参数使用时必须以 -- 开头。第二个参数是命令行的默认值,没有赋给命令行参数值时使用默认值。第三个参数 help 保存帮助信息,第四个参数表示限定了赋予命令行参数数据的类型。
_define_helper() 最后一个 type 参数是 str

# Provides the global object that can be used to access flags.
FLAGS = _FlagValues()

定义了 _FlagValues 这个类的一个实例,这样的这样当要访问命令行输入的命令时,就能使用像 tf.app.flag.Flags 这样的操作。

def mark_flag_as_required(flag_name):"""Ensures that flag is not None during program execution.It is recommended to call this method like this:if __name__ == '__main__':tf.flags.mark_flag_as_required('your_flag_name')tf.app.run()Args:flag_name: string, name of the flag to mark as required.Raises:AttributeError: if flag_name is not registered as a valid flag name.NOTE: The exception raised will change in the future. """if _global_parser.get_default(flag_name) is not None:_logging.warn('Flag %s has a non-None default value; therefore, ''mark_flag_as_required will pass even if flag is not specified in the ''command line!' % flag_name)FLAGS._add_required_flag(flag_name)def mark_flags_as_required(flag_names):"""Ensures that flags are not None during program execution.Recommended usage:if __name__ == '__main__':tf.flags.mark_flags_as_required(['flag1', 'flag2', 'flag3'])tf.app.run()Args:flag_names: a list/tuple of flag names to mark as required.Raises:AttributeError: If any of flag name has not already been defined as a flag.NOTE: The exception raised will change in the future."""for flag_name in flag_names:mark_flag_as_required(flag_name)

在程序运行前先将某些命令行参数加入到 必备参数 __required_flags 的字典中,以判断解析完的参数是否满足这些必备要求。因为 mark_flags_as_required(flag_names) 方法会调用 mark_flag_as_required(flag_name) 方法,将当前传入的参数加入到 __required_flags 字典中 (FLAGS._add_required_flag(flag_name) 方法),在最上面解析参数的方法 _parse_flags 中,解析完参数会通过 _assert_all_required 方法判断解析到的参数是否都在 _required_flags 字典中。

_allowed_symbols = [# We rely on gflags documentation.'DEFINE_bool','DEFINE_boolean','DEFINE_float','DEFINE_integer','DEFINE_string','FLAGS','mark_flag_as_required','mark_flags_as_required',
]

第一个是参数名称,第二个是参数默认值,第三个是参数描述,如果不想描述可以直接用 ""

def DEFINE_string(flag_name, default_value, docstring):"""Defines a flag of type 'string'.Args:flag_name: The name of the flag as a string.default_value: The default value the flag should take as a string.docstring: A helpful message explaining the use of the flag."""_define_helper(flag_name, default_value, docstring, str)def DEFINE_integer(flag_name, default_value, docstring):"""Defines a flag of type 'int'.Args:flag_name: The name of the flag as a string.default_value: The default value the flag should take as an int.docstring: A helpful message explaining the use of the flag."""_define_helper(flag_name, default_value, docstring, int)def DEFINE_float(flag_name, default_value, docstring):"""Defines a flag of type 'float'.Args:flag_name: The name of the flag as a string.default_value: The default value the flag should take as a float.docstring: A helpful message explaining the use of the flag."""_define_helper(flag_name, default_value, docstring, float)

通过 tf.app.flags 来调用这个 flags.py 文件,用 flags.DEFINE_string/interger/float() 来添加命令行参数,而 FLAGS=flags.FLAGS 可以实例化这个解析参数的类,进而从对应的命令行参数取出参数。

2. 使用示例

2.0 example 0

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# yongqiang chengimport tensorflow as tfflags = tf.app.flags
FLAGS = flags.FLAGS  # FLAGS = tf.app.flags.FLAGS - instantiation# training parameters.
flags.DEFINE_float('base_learning_rate', .0001, 'The base learning rate for model training.')
flags.DEFINE_integer('learning_rate_decay_step', 2000, 'Decay the base learning rate at a fixed step.')
flags.DEFINE_integer('train_batch_size', 12, 'The number of images in each batch during training.')
flags.DEFINE_boolean('upsample_logits', True, 'Upsample logits during training.')
flags.DEFINE_string('dataset', 'dataset_name', 'Name of the test dataset.')print(FLAGS.base_learning_rate)
print(FLAGS.learning_rate_decay_step)
print(FLAGS.train_batch_size)
print(FLAGS.upsample_logits)
print(FLAGS.dataset)
/home/yongqiang/miniconda3/envs/tf_cpu_1.4.1/bin/python /home/yongqiang/pycharm_work/yongqiang.py
0.0001
2000
12
True
dataset_nameProcess finished with exit code 0

2.1 example 1

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# yongqiang chengimport tensorflow as tfflags = tf.app.flags
FLAGS = flags.FLAGS# training parameters.
flags.DEFINE_float('base_learning_rate', .0001, 'The base learning rate for model training.')
flags.DEFINE_integer('learning_rate_decay_step', 2000, 'Decay the base learning rate at a fixed step.')
flags.DEFINE_integer('train_batch_size', 12, 'The number of images in each batch during training.')
flags.DEFINE_boolean('upsample_logits', True, 'Upsample logits during training.')
flags.DEFINE_string('dataset', 'dataset_name', 'Name of the test dataset.')def main(_):print(FLAGS.base_learning_rate)print(FLAGS.learning_rate_decay_step)print(FLAGS.train_batch_size)print(FLAGS.upsample_logits)print(FLAGS.dataset)if __name__ == '__main__':tf.app.run()
strong@foreverstrong:~/git_workspace/MonoGRNet$ python test.py
0.0001
2000
12
True
dataset_name
strong@foreverstrong:~/git_workspace/MonoGRNet$
strong@foreverstrong:~/git_workspace/MonoGRNet$ python test.py -h
usage: test.py [-h] [--base_learning_rate BASE_LEARNING_RATE][--learning_rate_decay_step LEARNING_RATE_DECAY_STEP][--train_batch_size TRAIN_BATCH_SIZE][--upsample_logits [UPSAMPLE_LOGITS]] [--noupsample_logits][--dataset DATASET]optional arguments:-h, --help            show this help message and exit--base_learning_rate BASE_LEARNING_RATEThe base learning rate for model training.--learning_rate_decay_step LEARNING_RATE_DECAY_STEPDecay the base learning rate at a fixed step.--train_batch_size TRAIN_BATCH_SIZEThe number of images in each batch during training.--upsample_logits [UPSAMPLE_LOGITS]Upsample logits during training.--noupsample_logits--dataset DATASET     Name of the test dataset.
strong@foreverstrong:~/git_workspace/MonoGRNet$

FLAGS = flags.FLAGS 可以实例化解析参数的类,进而从对应的命令行参数取出参数。

2.2 example 2

#!/usr/bin/env python
# -*- coding: utf-8 -*-import tensorflow as tftf.app.flags.DEFINE_string('str_name', 'yongqiang', "description1")
tf.app.flags.DEFINE_integer('int_name', 10, "description2")
tf.app.flags.DEFINE_boolean('bool_name', False, "description3")FLAGS = tf.app.flags.FLAGSdef main(_):print(FLAGS.str_name)print(FLAGS.int_name)print(FLAGS.bool_name)if __name__ == '__main__':tf.app.run()
strong@foreverstrong:~/git_workspace/MonoGRNet$ python test.py
yongqiang
10
False
strong@foreverstrong:~/git_workspace/MonoGRNet$ python test.py --str_name foreverstrong --int_name 19 --bool_name True
foreverstrong
19
True
strong@foreverstrong:~/git_workspace/MonoGRNet$
strong@foreverstrong:~/git_workspace/MonoGRNet$ python test.py -h
usage: test.py [-h] [--str_name STR_NAME] [--int_name INT_NAME][--bool_name [BOOL_NAME]] [--nobool_name]optional arguments:-h, --help            show this help message and exit--str_name STR_NAME   description1--int_name INT_NAME   description2--bool_name [BOOL_NAME]description3--nobool_name
strong@foreverstrong:~/git_workspace/MonoGRNet$

tf.app.flags.DEFINE_xxx() 添加命令行的 optional argument (可选参数),而 tf.app.flags.FLAGS 可以从对应的命令行参数取出参数。

在命令行运行程序时,不带参数运行,程序使用默认值。使用命令行赋初值时,就会调用使用命令行设置的值。

命令行输入 flag_name + parameter,例如 --learning_rate 0.01。两个短横杠 + 参数名字 + 空格 + 赋给参数的值,多个参数时,用空格隔开。

如果需要修改默认参数的值,则在命令行传入自定义参数值即可,若全部使用默认参数值,则可直接在命令行运行 Python 文件。

在命令行中输入 python test.py -h 可以查看帮助信息。

2.3 example 3

#!/usr/bin/env python
# -*- coding: utf-8 -*-import tensorflow as tfflags = tf.app.flags
FLAGS = flags.FLAGStf.app.flags.DEFINE_integer('train_batch_size', 12, 'The number of images in each batch during training.')
tf.app.flags.DEFINE_boolean("is_train", True, "")def main():print("{}".format(FLAGS.train_batch_size))print("{}".format(FLAGS.is_train))if __name__ == '__main__':tf.app.run()

main() 函数是需要传参数,否则会出现如下报错信息。
注意 def main(): 括号中没有下划线。

strong@foreverstrong:~/git_workspace/MonoGRNet$ python test.py -h
usage: test.py [-h] [--train_batch_size TRAIN_BATCH_SIZE][--is_train [IS_TRAIN]] [--nois_train]optional arguments:-h, --help            show this help message and exit--train_batch_size TRAIN_BATCH_SIZEThe number of images in each batch during training.--is_train [IS_TRAIN]--nois_train
strong@foreverstrong:~/git_workspace/MonoGRNet$
strong@foreverstrong:~/git_workspace/MonoGRNet$ python test.py
Traceback (most recent call last):File "test.py", line 19, in <module>tf.app.run()File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/platform/app.py", line 48, in run_sys.exit(main(_sys.argv[:1] + flags_passthrough))
TypeError: main() takes no arguments (1 given)
strong@foreverstrong:~/git_workspace/MonoGRNet$
strong@foreverstrong:~/git_workspace/MonoGRNet$ python test.py --train_batch_size 64
Traceback (most recent call last):File "test.py", line 19, in <module>tf.app.run()File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/platform/app.py", line 48, in run_sys.exit(main(_sys.argv[:1] + flags_passthrough))
TypeError: main() takes no arguments (1 given)
strong@foreverstrong:~/git_workspace/MonoGRNet$
strong@foreverstrong:~/git_workspace/MonoGRNet$ python test.py --train_batch_size 64 --is_train False
Traceback (most recent call last):File "test.py", line 19, in <module>tf.app.run()File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/platform/app.py", line 48, in run_sys.exit(main(_sys.argv[:1] + flags_passthrough))
TypeError: main() takes no arguments (1 given)
strong@foreverstrong:~/git_workspace/MonoGRNet$

def main(): 括号中添加下划线 def main(_):

#!/usr/bin/env python
# -*- coding: utf-8 -*-import tensorflow as tfflags = tf.app.flags
FLAGS = flags.FLAGStf.app.flags.DEFINE_integer('train_batch_size', 12, 'The number of images in each batch during training.')
tf.app.flags.DEFINE_boolean("is_train", True, "")def main(_):print("{}".format(FLAGS.train_batch_size))print("{}".format(FLAGS.is_train))if __name__ == '__main__':tf.app.run()

如果不传入参数则按默认值处理,否则根据传入的值对变量进行更新。

bool 型变量需要注意,bool 只有 TrueFalse,所以无论 bool 变量默认值为 True 还是 False,在变量面前加个 no 后都取 False,其他类型的没有这个特权。将 is_train 默认值设为 False--nois_train 运行结果仍为 False

strong@foreverstrong:~/git_workspace/MonoGRNet$ python test.py -h
usage: test.py [-h] [--train_batch_size TRAIN_BATCH_SIZE][--is_train [IS_TRAIN]] [--nois_train]optional arguments:-h, --help            show this help message and exit--train_batch_size TRAIN_BATCH_SIZEThe number of images in each batch during training.--is_train [IS_TRAIN]--nois_train
strong@foreverstrong:~/git_workspace/MonoGRNet$
strong@foreverstrong:~/git_workspace/MonoGRNet$ python test.py
12
True
strong@foreverstrong:~/git_workspace/MonoGRNet$
strong@foreverstrong:~/git_workspace/MonoGRNet$ python test.py --train_batch_size 64
64
True
strong@foreverstrong:~/git_workspace/MonoGRNet$
strong@foreverstrong:~/git_workspace/MonoGRNet$ python test.py --train_batch_size 64 --is_train False
64
False
strong@foreverstrong:~/git_workspace/MonoGRNet$
strong@foreverstrong:~/git_workspace/MonoGRNet$ python test.py --notrain_batch_size --nois_train
12
False
strong@foreverstrong:~/git_workspace/MonoGRNet$

2.4 example 4

#!/usr/bin/env python
# -*- coding: utf-8 -*-import tensorflow as tfflags = tf.app.flags
FLAGS = flags.FLAGStf.app.flags.DEFINE_integer('train_batch_size', 12, 'The number of images in each batch during training.')
tf.app.flags.DEFINE_boolean("is_train", True, "")def main(unused_argv):print("{}".format(FLAGS.train_batch_size))print("{}".format(FLAGS.is_train))print(unused_argv)if __name__ == '__main__':tf.app.run()

main(unused_argv) 函数必须有参数,为无法解析出的 sys.argv

strong@foreverstrong:~/git_workspace/MonoGRNet$ python test.py -h
usage: test.py [-h] [--train_batch_size TRAIN_BATCH_SIZE][--is_train [IS_TRAIN]] [--nois_train]optional arguments:-h, --help            show this help message and exit--train_batch_size TRAIN_BATCH_SIZEThe number of images in each batch during training.--is_train [IS_TRAIN]--nois_train
strong@foreverstrong:~/git_workspace/MonoGRNet$
strong@foreverstrong:~/git_workspace/MonoGRNet$ python test.py
12
True
['test.py']
strong@foreverstrong:~/git_workspace/MonoGRNet$
strong@foreverstrong:~/git_workspace/MonoGRNet$ python test.py --train_batch_size 64
64
True
['test.py']
strong@foreverstrong:~/git_workspace/MonoGRNet$
strong@foreverstrong:~/git_workspace/MonoGRNet$ python test.py --notrain_batch_size --nois_train
12
False
['test.py', '--notrain_batch_size']
strong@foreverstrong:~/git_workspace/MonoGRNet$
strong@foreverstrong:~/git_workspace/MonoGRNet$ python test.py --train_batch_size 64 --is_train False
64
False
['test.py']
strong@foreverstrong:~/git_workspace/MonoGRNet$
strong@foreverstrong:~/git_workspace/MonoGRNet$ python test.py --train_batch_size 64 --is_train False --gpus 0
64
False
['test.py', '--gpus', '0']
strong@foreverstrong:~/git_workspace/MonoGRNet$

2.5 example 5

#!/usr/bin/env python
# -*- coding: utf-8 -*-import tensorflow as tfflags = tf.app.flags
FLAGS = flags.FLAGStf.app.flags.DEFINE_integer('train_batch_size', 12, 'The number of images in each batch during training.')
tf.app.flags.DEFINE_boolean("is_train", True, "")def main(_):print("{}".format(FLAGS.train_batch_size))print("{}".format(FLAGS.is_train))print(_)if __name__ == '__main__':tf.app.run()

tf.app.run() 会自动调用 main(_) 函数,将文件名和未解析出的内容传到 main 函数的参数中。--gpus 0 未解析出,则放入 main 参数 _ 中。

strong@foreverstrong:~/git_workspace/MonoGRNet$ python test.py -h
usage: test.py [-h] [--train_batch_size TRAIN_BATCH_SIZE][--is_train [IS_TRAIN]] [--nois_train]optional arguments:-h, --help            show this help message and exit--train_batch_size TRAIN_BATCH_SIZEThe number of images in each batch during training.--is_train [IS_TRAIN]--nois_train
strong@foreverstrong:~/git_workspace/MonoGRNet$
strong@foreverstrong:~/git_workspace/MonoGRNet$ python test.py
12
True
['test.py']
strong@foreverstrong:~/git_workspace/MonoGRNet$
strong@foreverstrong:~/git_workspace/MonoGRNet$ python test.py --train_batch_size 64
64
True
['test.py']
strong@foreverstrong:~/git_workspace/MonoGRNet$
strong@foreverstrong:~/git_workspace/MonoGRNet$ python test.py --train_batch_size 64 --is_train False
64
False
['test.py']
strong@foreverstrong:~/git_workspace/MonoGRNet$
strong@foreverstrong:~/git_workspace/MonoGRNet$ python test.py --train_batch_size 64 --is_train False --gpus 0
64
False
['test.py', '--gpus', '0']
strong@foreverstrong:~/git_workspace/MonoGRNet$
strong@foreverstrong:~/git_workspace/MonoGRNet$ python test.py --notrain_batch_size --nois_train
12
False
['test.py', '--notrain_batch_size']
strong@foreverstrong:~/git_workspace/MonoGRNet$

tf.app.flags相关推荐

  1. tf.app.flags 定义命令行可选参数

      tensorflow 定义了tf.app.flags,它是用来支持接受命令行传递参数,相当于接受argv,其中tf.app.flags.DEFINE_xx()用来添加命令行的optional ar ...

  2. tf.app.flags和tf.app.run的使用

    tf.app.flags和tf.app.run的使用 tf.app.flags主要用于处理命令行参数的解析工作,其实可以理解为一个封装好了的argparse包(argparse是一种结构化的数据存储格 ...

  3. tf.app.flags的使用教程

    参考博客:https://blog.csdn.net/leiting_imecas/article/details/72367937 tf定义了tf.app.flags,用于支持接受命令行传递参数,相 ...

  4. TensorFlow 学习(十三)—— tf.app.flags

    flags = tf.app.flags FLAGS = flags.FLAGSflags.DEFINE_integer('num_hidden_layers', 3, 'number of hidd ...

  5. TensorFlow 中 tf.app.flags.FLAGS 的用法介绍

    转载自:https://blog.csdn.net/lyc_yongcai/article/details/73456960 下面介绍 tf.app.flags.FLAGS 的使用,主要是在用命令行执 ...

  6. 简单使用tf.app.run()、tf.logging和tf.app.flags机制

    1.测试输入 # fila_name: temp.py import tensorflow as tfFLAGS = tf.app.flags.FLAGStf.app.flags.DEFINE_str ...

  7. python获取命令行参数 flags_命令行参数--tf.app.flags和python argparse

    在实际工作中我们一般通过运行脚本时获取命令行的参数,有两种方式: 一.利用tf.app.flags组件 tf定义了tf.app.flags,用于接受命令行传递参数,相当于接受argv.首先调用自带的D ...

  8. tf.app.flags.DEFINE_string()和tf.app.flags.FLAGS和tf.app.run()

    tf.app.flags tf.app.flags主要用于处理命令行参数的解析工作,其实可以理解为一个封装好了的argparse包(argparse是一种结构化的数据存储格式,类似于Json.XML) ...

  9. tensorflow(学习一)中的tf.app.flags函数定义命令行参数

    转自http://blog.csdn.net/leiting_imecas/article/details/72367937 tf定义了tf.app.flags,用于支持接受命令行传递参数,相当于接受 ...

  10. tensorflow命令行参数:tf.app.flags.DEFINE_string、tf.app.flags.DEFINE_integer、tf.app.flags.DEFINE_boolean

    tf 中定义了 tf.app.flags.FLAGS ,用于接受从终端传入的命令行参数,相当于对Python中的命令行参数模块optpars(参考: python中处理命令行参数的模块optpars ...

最新文章

  1. Java中的文件上传2(Commons FileUpload:commons-fileupload.jar)
  2. MyEclipse Enterprise Workbench 9.0 破解及注册机 注册码
  3. 【转】计算机学会推荐国际学术期刊
  4. 使用powerdesigner建立UML类图
  5. 来自艾斯维尔的计算机科学系的期刊排行,研究生必备!
  6. javafx swing_Swing应用程序中的JavaFX 8 DatePicker
  7. 筛法求素数c 语言,位筛法求素数,有段代码看不懂,有大佬可以来说一下
  8. 设置第一个字母字体变大并且所有字母大小写 及下划线
  9. 微型计算机原理及应用 课程设计,《微型计算机原理及其应用》课程设计.docx
  10. android调用邮件应用发送email
  11. 电脑是否入侵,是否留有后门
  12. Java高级工程师必备技术栈
  13. EndNote20 for Mac 与搭载Apple M1芯片Mac版Word不兼容的解决方案(新发布的EndNote 20.1更新版可适配Apple M1)
  14. 主页被锁定为 hao.360.cn
  15. Brightest Immaculate Teresa(简单题)(北理16校赛)
  16. qconshanghai2017
  17. WPS关闭不了后台一直运行的解决办法(wpscloudsvr.exe)
  18. 图片怎么缩小到300k?如何将图片缩小到300k以内?
  19. 服务器停机除尘VS服务器带电清洗
  20. nodejs、express报错Error[ERR_HTTP_HEADERS_SENT]:Cannot set headers after they are sent to the client

热门文章

  1. ECU存储安全之存储器安全
  2. oppo手机工程模式清除数据需要密码_普通人也可以做码农?黑客教你如何在手机上开发运用代码...
  3. C4D渲染保存多通道psd格式,图层都是线性减淡模式,oc多通道图层都是线性简单模式
  4. Vue如何监视屏幕尺寸变化
  5. python12岁该学吗_本人12岁,对编程感兴趣,之前也学过python,被爸妈打消积极性,面对爸妈的反对,我该顺从还是继续?...
  6. html%2b怎么转换成加号,url 参数的加号变成空格处理
  7. On iPad, UIImagePickerController must be presented via UIPopoverController
  8. 学习使用linux下tags文件
  9. 邮件系统安全篇:GCMAil邮件系统怎样利用DNS黑名单高效实现反垃圾邮件过滤
  10. robots文件对网站优化有哪些作用