如何编写Python文件,使其既可以是模块,也可以是具有命令行选项和管道功能的脚本?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了如何编写Python文件,使其既可以是模块,也可以是具有命令行选项和管道功能的脚本?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2300字,纯文字阅读大概需要4分钟。
内容图文
![如何编写Python文件,使其既可以是模块,也可以是具有命令行选项和管道功能的脚本?](/upload/InfoBanner/zyjiaocheng/796/001d53eafc4d4c2193cb1b709924fdd1.jpg)
我正在考虑如何将Python文件作为可导入模块以及能够接受命令行选项和参数以及管道数据的脚本.该怎么做?
我的尝试似乎有效,但我想知道我的方法是否应该完成这样的事情(如果应该这样做的话).我有没有考虑过复杂性(例如导入时)?
#!/usr/bin/env python
"""
usage:
program [options]
options:
--version display version and exit
--datamode engage data mode
--data=FILENAME input data file [default: data.txt]
"""
import docopt
import sys
def main(options):
print("main")
datamode = options["--datamode"]
filename_input_data = options["--data"]
if datamode:
print("engage data mode")
process_data(filename_input_data)
if not sys.stdin.isatty():
print("accepting pipe data")
input_stream = sys.stdin
input_stream_list = [line for line in input_stream]
print("input stream: {data}".format(data = input_stream_list))
def process_data(filename):
print("process data of file {filename}".format(filename = filename))
if __name__ == "__main__":
options = docopt.docopt(__doc__)
if options["--version"]:
print(version)
exit()
main(options)
解决方法:
就是这样,你很好.
除了if __name__ ==’__ main__’,as noted elsewhere之外,没有什么比这更重要了[1]
从docs(强调我的):
A module’s
__name__
is set equal to'__main__'
when read from standard input, a script, or from an interactive prompt. A module can discover whether or not it is running in the main scope by checking its own__name__
, which allows a common idiom for conditionally executing code in a module when it is run as a script or with python -m but not when it is imported
我也喜欢python 2的docs如诗意地说它
It is this environment in which the idiomatic “conditional script” stanza causes a script to run:
该守卫保证只有被调用的主函数才能接受它下面的代码;把你所有的争论代码放在那里.如果除了类/函数声明之外没有其他顶级代码,则导入将是安全的.
其他并发症?
是:
>多处理(启动新的解释器并重新导入内容). if __name__ ==’__ main__’covers that
>如果您习惯使用C编码,您可能会认为可以使用ifdef等保护您的导入. There’s some analogous hacks in python, but it’s not what you’re looking for.
我喜欢有一个像C和Java这样的主要方法 – 何时出现? Never.
但我是偏执狂! What if someone changes my main function.不要和那个人成为朋友.只要您是用户,我认为这不是问题.
我提到了-m标志.那听起来不错,那是什么?! Here和here,但不要担心.
脚注:
[1]嗯,你把主代码放在函数中的事实很好.意味着事情会run slightly faster
内容总结
以上是互联网集市为您收集整理的如何编写Python文件,使其既可以是模块,也可以是具有命令行选项和管道功能的脚本?全部内容,希望文章能够帮你解决如何编写Python文件,使其既可以是模块,也可以是具有命令行选项和管道功能的脚本?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。