我已经开始认真学习Python作为我的第一门编程语言,并掌握一些算法基础知识.由于每个人都建议最好的方法是找到有用的东西,我决定用一个小脚本来管理我的存储库.
基本事项: - 启用/禁用YUM存储库 - 更改当前YUM存储库的优先级 - 添加/删除存储库
虽然解析文件并替换/添加/删除数据非常简单,但我正在努力(主要是因为可能缺乏知识)与'optparse'的单一事物......我想添加一个选项(-l)列出了当前可用的存储库...我已经创建了一个简单的函数来完成这项工作(不是非常详细的),但是我无法将它与optparse上的'-l'连接起来.任何人都可以提供如何做到这一点的例子/建议?
当前脚本是这样的:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import os
import sys
import optparse
import ConfigParse
repo_file = "/home/nmarques/my_repos.repo"
parser = optparse.OptionParser()
parser.add_option("-e", dest="repository", help="Enable YUM repository")
parser.add_option("-d", dest="repository", help="Disable YUM repository")
parser.add_option("-l", dest="list", help="Display list of repositories", action="store_true")
(options, args) = parser.parse_args()
def list_my_repos()
# check if repository file exists, read repositories, print and exit
if os.path.exists(repo_file):
config = ConfigParser.RawConfigParser()
config.read(repo_file)
print "Found the following YUM repositories on " + …
Run Code Online (Sandbox Code Playgroud) 我正在使用Python 2.7,我有以下简单的脚本,它需要一个命令行参数:
#!/usr/bin/env python
import sys
if (len(sys.argv) == 2):
print "Thanks for passing ", sys.argv[1]
else:
print "Oops."
Run Code Online (Sandbox Code Playgroud)
我可以从命令行执行以下操作:
My-Box:~/$ ./useArg.py asdfkjlasdjfdsa
Thanks for passing asdfkjlasdjfdsa
Run Code Online (Sandbox Code Playgroud)
或这个:
My-Box:~/$ ./useArg.py
Oops.
Run Code Online (Sandbox Code Playgroud)
我想通过交互式编辑器做类似的事情:
>>> import useArg asdfasdf
File "<stdin>", line 1
import useArg asdfasdf
^
SyntaxError: invalid syntax
Run Code Online (Sandbox Code Playgroud)
但我不知道怎么做.如何在交互式编辑器中传递参数以导入/重新加载?
想象一下,有一个框架提供了一个方法logutils.set_up()
,根据一些配置设置日志记录.
应尽早设置日志记录,因为导入库期间发出的警告不应丢失.
由于旧的way(if __name__=='__main__':
)看起来很丑,我们使用console_script入口点来注册该main()
方法.
# foo/daily_report.py
from framework import logutils
logutils.set_up()
def main():
...
Run Code Online (Sandbox Code Playgroud)
我的问题是logutils.set_up()
可能会被调用两次:
想象一下,有一个第二个控制台脚本调用logutils.set_up()
和imports daily_report.py
.
我可以更改框架代码并set_up()
在第二次调用中什么也不做logutils.set_up()
,但这感觉很笨拙.我想避免它.
我怎么能确定logutils.set_up()
只执行一次?
在具有__main__.py
, 而不是
# __main__.py
# def main...
if __name__ == "__main__":
main()
Run Code Online (Sandbox Code Playgroud)
...可以这样做吗:
# __main__.py
# def main...
main()
Run Code Online (Sandbox Code Playgroud)
编辑:
@user2357112-supports-Monica 的论点对我来说很有意义,所以我回过头来追踪给我带来问题的库,导致我仍在添加该if __...
行。它是在调用python -m pytest --doctest-modules
。
也许这是唯一在跑步时出错的地方__main__.py
?也许这是一个错误?
通过将文档中的第一个示例复制到a 中__main__.py
:
????????????????????????????????????????????????????????????????????????????????????? package/__main__.py ?????????????????????????????????????????????????????????????????????????????????????
package/__main__.py:58: in <module>
args = parser.parse_args()
/usr/local/Cellar/python/3.7.7/Frameworks/Python.framework/Versions/3.7/lib/python3.7/argparse.py:1755: in parse_args
args, argv = self.parse_known_args(args, namespace)
/usr/local/Cellar/python/3.7.7/Frameworks/Python.framework/Versions/3.7/lib/python3.7/argparse.py:1787: in parse_known_args
namespace, args = self._parse_known_args(args, namespace)
/usr/local/Cellar/python/3.7.7/Frameworks/Python.framework/Versions/3.7/lib/python3.7/argparse.py:2022: in _parse_known_args
', '.join(required_actions))
/usr/local/Cellar/python/3.7.7/Frameworks/Python.framework/Versions/3.7/lib/python3.7/argparse.py:2508: in error
self.exit(2, _('%(prog)s: error: %(message)s\n') % args) …
Run Code Online (Sandbox Code Playgroud) 在PEP 366 -主模块显式相对导入中引入了模块范围变量__package__
以允许在子模块中显式相对导入,有以下摘录:
当主模块由其文件名指定时,该
__package__
属性将设置为None
. 为了在直接执行模块时允许相对导入,在第一个相对导入语句之前需要类似于以下的样板:Run Code Online (Sandbox Code Playgroud)if __name__ == "__main__" and __package__ is None: __package__ = "expected.package.name"
请注意,仅当顶级包已经可以通过
sys.path
. 需要额外的操作代码sys.path
才能直接执行工作,而无需导入顶级包。这种方法也有与使用兄弟模块的绝对导入相同的缺点——如果脚本被移动到不同的包或子包,样板将需要手动更新。它的优点是每个文件只需进行一次此更改,而不管相关导入的数量如何。
我尝试在以下设置中使用此样板:
目录布局:
foo
??? bar.py
??? baz.py
Run Code Online (Sandbox Code Playgroud)
bar.py 子模块的内容:
if __name__ == "__main__" and __package__ is None:
__package__ = "foo"
from . import baz
Run Code Online (Sandbox Code Playgroud)
当从文件系统执行子模块 bar.py 时,样板工作(PYTHONPATH
修改使包 foo/ 可访问sys.path
):
PYTHONPATH=$(pwd) python3 foo/bar.py
Run Code Online (Sandbox Code Playgroud)
当从模块命名空间执行子模块 bar.py 时,样板也可以工作:
python3 -m foo.bar
Run Code Online (Sandbox Code Playgroud)
但是,以下替代样板在这两种情况下都与 bar.py 子模块的内容一样有效:
if __package__:
from …
Run Code Online (Sandbox Code Playgroud) 我正在尝试使用@Lob
具有 JavaString
类型的列将其内容映射到TEXT
Postgres 内部。这是相关实体:
@Entity(name="metadata")
public class Metadata {
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
@Column(name = "id")
private Long id;
@Column(name = "created_on")
@ColumnDefault(value="CURRENT_TIMESTAMP")
@Generated(GenerationTime.INSERT)
private LocalDateTime createdOn;
@Lob
@Column(name = "content")
private String content;
@Column(name = "draft")
private Boolean draft;
@OneToMany(cascade = javax.persistence.CascadeType.ALL, fetch = FetchType.LAZY, mappedBy = "metadata")
private List<Attachment> attachments;
public void addAttachment(Attachment attachment) {
if (attachments == null) {
attachments = new ArrayList<>();
}
attachments.add(attachment);
attachment.setMetadata(this);
}
// getters and setters
}
Run Code Online (Sandbox Code Playgroud)
Metadata
我有根据使用输入创建新实体的代码。我在 …
Python新手,来自Java(&Android)&C,C++,C#背景.基本上寻找相似之处.什么是python项目的入口点?喜欢其他语言的Main方法.具有多个.py脚本的项目,如何设置入口点?
在 Python 2.7.8 上调用我的函数 start 并使用 multiprocessing 模块时出现此错误。我使用的是 mac OS 10.9.5。
The process has forked and you cannot use this CoreFoundation functionality safely.
You MUST exec(). Break on __THE_PROCESS_HAS_FORKED_AND_YOU_CANNOT_USE_THIS_
COREFOUNDATION_FUNCTIONALITY___YOU_MUST_EXEC__() to debug.
Run Code Online (Sandbox Code Playgroud)
这是类格子下的代码。我的函数 sansfin 运行良好并返回一个布尔值,它只将 self 和一个整数作为参数进行循环。
def start(self):
if __name__ == '__main__':
self.run = True
p = Process(target=self.sansfin, args=(1000,))
p.start()
p.join()
def stop(self):
self.run = False
Run Code Online (Sandbox Code Playgroud)
我对这条消息很迷茫。我在那里和其他地方都没有发现任何有用的东西。有些人建议一个错误......
我是一般编程的新手,刚开始真正接触python。我正在做一个数字猜测项目。
import random
def main(): # main function
print("Welcome to the number guesser game")
range_func()
max_guess_number(lower_range_cut, upper_range_cut)
evaluation(random_number, total_guesses)
def range_func(): # allows user to select a range for the number guess
print("Please select a range in which you would like to guess.")
lower_range_cut = int(input("Lower boundary limit: "))
global lower_range_cut
upper_range_cut = int(input("Upper boundary limit: "))
global upper_range_cut
random_number = random.randint(lower_range_cut,upper_range_cut)
global random_number
return lower_range_cut, upper_range_cut, random_number
def max_guess_number(low,high): # returns the total number of guesses
total_numbers = (high …
Run Code Online (Sandbox Code Playgroud) python ×9
access ×1
boilerplate ×1
entry-point ×1
function ×1
import ×1
lob ×1
logging ×1
macos ×1
optparse ×1
postgresql ×1
python-3.x ×1
return ×1
sql ×1