小编and*_*tti的帖子

Python argparse和bash完成

我想在我的python脚本中也可以在参数中自动完成.

我从来没有真正理解bash_completion是如何工作的(对于参数),但是在我深入了解之后我明白了:

  1. 它使用"完成"将完成函数绑定到命令
  2. 每个完成函数基本上都是参数解析器的副本

第二点尤其不是很好,因为我想让它自动生成.

最好的事情是shell会在每个TAB上向我的程序询问要完成什么,但我的印象是这不能真正起作用,这是正确的吗?

第二个选项可能只是将一个转换器从argparse解析器写入一个正确完成的shell函数.

python argparse bash-completion

54
推荐指数
2
解决办法
2万
查看次数

GHC 7.4更新中断haskell98?

我今天更新了ghc,我的小程序停止了工作:

https://github.com/BrisFunctional/misere-oxo/blob/master/OXO/misere.hs

GHC现在是版本7.4.1-2,从我设法理解它现在默认为haskell2010标准,而不是haskell98.(正如我从ghc-pkg列表的输出中看到的):

haskell2010-1.1.0.1
(haskell98-2.0.0.1)
Run Code Online (Sandbox Code Playgroud)

所以我将"import List"更改为"import Data.List",我认为这是唯一的问题,但现在我得到以下内容:

 misere.hs:1:1: Not in scope: `System.Environment.withArgs'
Run Code Online (Sandbox Code Playgroud)

这是从哪里来的,因为我从来没有导入System.Environment?任何提示?谢谢

编辑:我更新了github上的版本以反映此错误.实际上使用Data.List ghc完美地编译文件,因此runhaskell会产生这个问题.

haskell ghc

12
推荐指数
2
解决办法
5164
查看次数

Python对点图

我正在分析由python代码生成的"有趣和利润"的AST,我希望有一些比"ast.dump"更具图形性的东西来实际看到生成的AST.

理论上已经是一棵树了,所以创建一个图表应该不会太难,但我不明白我是怎么做到的.

ast.walk似乎走了一个BFS策略,而visitX方法我真的看不到父或我似乎没有找到创建图的方法...

似乎唯一的方法就是编写自己的DFS walk函数,它是否有意义?

python grammar abstract-syntax-tree

8
推荐指数
2
解决办法
1952
查看次数

使用argparse保持参数不受影响

我想使用argparse来解析它知道的参数,然后保持其余的不变.例如,我希望能够运行

performance -o output other_script.py -a opt1 -b opt2
Run Code Online (Sandbox Code Playgroud)

哪个使用该-o选项,其余部分保持不变.

模块profiler.py与optparse做了类似的事情,但由于我正在使用argparse,我正在做:

def parse_arguments():
    parser = new_argument_parser('show the performance of the given run script')
    parser.add_argument('-o', '--output', default='profiled.prof')

    return parser.parse_known_args()

def main():
    progname = sys.argv[1]
    ns, other_args = parse_arguments()
    sys.argv[:] = other_args
Run Code Online (Sandbox Code Playgroud)

这似乎也有效,但如果other_script.py也有-o标志会发生什么?

通常有更好的方法来解决这个问题吗?

python argparse

6
推荐指数
2
解决办法
2655
查看次数

Python中的工厂方法

我正在处理以下小项目:https : //github.com/AndreaCrotti/project-organizer

简而言之,它旨在更轻松地管理许多不同的项目。有用的事情之一是一种自动检测我正在处理的项目类型,正确设置一些命令的方法。

目前,我正在使用类方法“匹配”功能和一个对各种“匹配”进行迭代的检测功能。我敢肯定可能会有更好的设计,但是找不到。

有任何想法吗?

class ProjectType(object):
    build_cmd = ""

    @classmethod
    def match(cls, _):
        return True


class PythonProject(ProjectType):
    build_cmd = "python setup.py develop --user"

    @classmethod
    def match(cls, base):
        return path.isfile(path.join(base, 'setup.py'))


class AutoconfProject(ProjectType):
    #TODO: there should be also a way to configure it
    build_cmd = "./configure && make -j3"

    @classmethod
    def match(cls, base):
        markers = ('configure.in', 'configure.ac', 'makefile.am')
        return any(path.isfile(path.join(base, x)) for x in markers)


class MakefileOnly(ProjectType):
    build_cmd = "make"

    @classmethod
    def match(cls, base):
        # if we can …
Run Code Online (Sandbox Code Playgroud)

python

5
推荐指数
1
解决办法
4763
查看次数

上下文管理员是否适合这份工作?

下面粘贴的代码执行以下操作:

  • 创建一个导入钩子
  • 创建一个上下文管理器,用于设置meta_path和清除退出.
  • 转储在imports.log中输入的程序完成的所有导入

现在我想知道在这种情况下使用上下文管理器是否是一个好主意,因为实际上我没有标准try/finally流程,只是设置和清理.

另一件事 - 用这条线:

with CollectorContext(cl, sys.argv, 'imports.log') as cc:
Run Code Online (Sandbox Code Playgroud)

确实cc成了None?它不应该是一个CollectorContext对象吗?

from __future__ import with_statement
import os
import sys

class CollectImports(object):
    """
    Import hook, adds each import request to the loaded set and dumps
    them to file
    """

    def __init__(self):
        self.loaded = set()

    def __str__(self):
        return str(self.loaded)

    def dump_to_file(self, fname):
        """Dump the loaded set to file
        """
        dumped_str = '\n'.join(x for x in self.loaded)
        open(fname, 'w').write(dumped_str) …
Run Code Online (Sandbox Code Playgroud)

python decorator contextmanager

5
推荐指数
1
解决办法
584
查看次数

生成导入图

我正在接近我的最终目标,即在模块和其他导入模块之间生成一个漂亮的图表。

例如,如果 x 从 y 和 z 导入,y 从 t 和 v 导入,我希望:

x -> y, z
y -> t, v
Run Code Online (Sandbox Code Playgroud)

现在我已经定义了导入钩子,如下所示,但是在一个简单的文件上运行它我没有得到我所期望的结果:

python study_imports.py CollectImports simple.py

('study_imports.py', 'study_imports')
Run Code Online (Sandbox Code Playgroud)

simple.py实际上是从study_imports导入的。问题是我想看到“simple.py”而不是“study_imports.py”,有没有办法获取实际导入其他模块的文件的路径?

class CollectImports(object):
    """
    Import hook, adds each import request to the loaded set and dumps
    them to file
    """

    def __init__(self, output_file):
        self.loaded = set()
        self.output_file = output_file

    def __str__(self):
        return str(self.loaded)

    def cleanup(self):
        """Dump the loaded set to file
        """
        dumped_str = '\n'.join(x for x in self.loaded)
        open(self.output_file, 'w').write(dumped_str)

    def …
Run Code Online (Sandbox Code Playgroud)

python import introspection

5
推荐指数
1
解决办法
867
查看次数

python中不同级别的日志记录

我想做一些我认为很简单的事情.

实际上,使用python日志记录模块,我感兴趣的是在命令行中以命令行参数给出的级别记录所有内容,并记录到文件到固定的DEBUG级别.

创建具有不同级别的两个不同的记录器不起作用,但是设置两个不同处理程序的级别都添加到根记录器也不起作用,所以任何关于我应该如何实际操作的想法?(在其他链接上阅读第二种方法应该有效,所以我做了别的蠢事吗?)

这是设置我的日志记录系统的代码:

class LoggerSetup(object):
    """Setup the different logger objects
    """

    def __init__(self):
        self.root_logger = logging.getLogger()
        self.shell_hdlr = logging.StreamHandler()

    #TODO: add another logging handler which stores to a temporary file
    #which should be cleaned up later
    def setup_shell_logger(self, log_level):
        self.root_logger.setLevel(LOG_LEVELS[log_level])
        # in this way the root logger is not set but the handlers are set
        self.shell_hdlr = logging.StreamHandler()
        self.shell_hdlr.setLevel(LOG_LEVELS[log_level])
        self.shell_hdlr.setFormatter(StarFormatter())
        #FIXME: add the support for regular expression exclusion too
        self.root_logger.addHandler(self.shell_hdlr)

    def setup_log_include(self, log_include):
        """Set up the filter to include …
Run Code Online (Sandbox Code Playgroud)

python logging

5
推荐指数
1
解决办法
1万
查看次数

python 中的 sys.excepthook 行为

我发现 sys.excepthook 的工作原理非常令人困惑。鉴于以下情况,我找不到一种方法可以继续下去,以防异常被钩子捕获。简而言之,我从未到达打印声明,但我确信理论上这是可能继续的。返回 True 或 False 也没有帮助吗?

import sys
from shutil import copy
from subprocess import Popen


def my_except_hook(etype, value, tb):
    print("got an exception of type", etype)


if __name__ == '__main__':
    sys.excepthook = my_except_hook
    copy('sdflsdk')
    print("here")
    Popen('sdflkjdklsdj')
Run Code Online (Sandbox Code Playgroud)

那么输出是:

('got an exception of type', <type 'exceptions.TypeError'>)
Run Code Online (Sandbox Code Playgroud)

python exception

5
推荐指数
1
解决办法
1985
查看次数

虽然是真的还是1?

可能重复:
while(1)Vs. for while(True) - 为什么会有区别?

我有时会在其他人看到代码"while 1"而不是"while True".我认为使用True更加pythonic,但我想检查练习中是否有任何差异.

所以我尝试做以下事情,结果令人惊讶.对于我所看到的,看起来解释器可以优化掉1布尔转换,而不是True,与我想的相反.

任何人都可以解释我为什么会这样,或者说我的结论可能是错的?

def f1():
    while 1:
        pass

def f2():
    while True:
        pass

In [10]: dis.dis(f)
2           0 SETUP_LOOP               3 (to 6)

3     >>    3 JUMP_ABSOLUTE            3
      >>    6 LOAD_CONST               0 (None)
            9 RETURN_VALUE

In [9]: dis.dis(f1)
2           0 SETUP_LOOP              10 (to 13)
      >>    3 LOAD_GLOBAL              0 (True)
            6 POP_JUMP_IF_FALSE       12

3           9 JUMP_ABSOLUTE            3
      >>   12 POP_BLOCK
      >>   13 LOAD_CONST               0 (None)
           16 RETURN_VALUE
Run Code Online (Sandbox Code Playgroud)

python interpreter bytecode

3
推荐指数
1
解决办法
1632
查看次数

Emacs并在存储库之间跳转

我现在正在使用awesome软件包"find-file-in-repository"在不同存储库中的文件之间跳转,使用ido巧妙地完成文件路径.

然而,我面临的一个问题是我至少每天都在处理10个不同的存储库,所以我想找到一种方法来执行以下操作.

一个假设的函数切换到调用时:

  • 如果我开始键入文件路径,它的行为就像find-file-in-repository
  • 如果我输入不应该在文件路径中的其他内容(例如":"),那么我可以切换项目,并且(在某处给出我的存储库的硬编码列表)然后像以前一样在文件路径上完成.

有没有像这样的轻量级和智能可用?有关其他可能的工作流程的任何建议,否则在存储库中的项目和文件之间切换?

我想避免在我的存储库中将所有可能的文件放在一个完整列表中,因为它变得非常慢并且更难找到我正在寻找的东西.

emacs elisp

3
推荐指数
1
解决办法
87
查看次数

Eclipse,导入项目但不要复制

我使用Linux作为主要操作系统,我还必须在使用Eclipse 3.7的Windows虚拟机上工作.

我们正在使用颠覆但是使用Linux我很高兴使用git-svn和Emacs + magit,这很有效.所以我希望能够处理来自两个操作系统的相同代码,并且只能在Linux上进行真正的版本控制管理.

所以我有以下想法:
1.与virtualbox
共享目录2.创建指向共享目录的项目

好吧,这不起作用,因为愚蠢的事情想要复制一切.所以我尝试使用虚拟文件夹,这似乎是一个好主意,但现在一些脚本严重失败,因为他们找不到硬编码路径.

所以我不知道该尝试什么,任何想法?

编辑:
我上次编辑的最后一次尝试不起作用,所以我有一个更简单的问题.鉴于git/svn /无论是什么存储库检查,为什么我不能简单地告诉Eclipse在那里创建一个项目而不触及文件?

Eclipse是否很难在该位置创建它的.project?
而且由于显然没有"支持"的方式来做,可能有任何解决方法吗?

eclipse svn windows git virtualbox

1
推荐指数
1
解决办法
7354
查看次数

从python字典到设置列表

我希望能够在可以设置的选项列表中转换字典(使用完整路径),例如,这应该通过:

def test_dic_to_args(self):
    dic = {"x1": {"x2": "val1"}, "x2": "val3"}
    des = ["x1.x2:val1", "x2:val3"]
    self.assertEqual(conf.dict_to_args(dic), des)
Run Code Online (Sandbox Code Playgroud)

现在我开始编写它,我认为它很简单,但它比我想象的更棘手,有队列,类型检查等等.有没有一种聪明的方法来解决这个问题?也许最好的选择仍然是递归DFS,你怎么看?

python dictionary

0
推荐指数
1
解决办法
122
查看次数