小编Ero*_*mic的帖子

是否可以让Windows自动完成自定义命令?

我正在运行Console2,我相信它只是windows cmd的一个接口

我有一个自定义批处理文件,可以为我完成大部分脏工作,但现在有很多命令.有没有办法可以在Windows命令提示符下使用tap自动完成工作?

例如:我的脚本名为rob.bat,它接收了不同数量的参数

它想键入rob set {Tab},然后让它循环

setup_envvars setup_userprefs setup_whateverothersetupscriptsIhave

有没有办法做到这一点?

console customization autocomplete

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

在mingw窗口上使用openmp.找不到-lpthread

我有一个使用OpenMP的CMake项目,可以在linux上运行.当我在我的Windows机器上编译它时,看起来CMake很难找到mingw的gcc的openmp标志.

我决定尝试一个较小的测试用例,然后编译main_openmp.c

#include <omp.h>
#include <stdio.h>
int main(int argc, char* argv[]) {
    int id;
    #pragma omp parallel private(id)
        {
        id = omp_get_thread_num();
        printf("%d: Hello World!\n", id);
        }
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

然后当我尝试编译

gcc -o OpenMPTest2 main_testomp.c -fopenmp
Run Code Online (Sandbox Code Playgroud)

我明白了

>>> gcc -o OpenMPTest2 main_testomp.c -fopenmp
c:/mingw/bin/../lib/gcc/mingw32/4.8.1/../../../../mingw32/bin/ld.exe: cannot find -lpthread
collect2.exe: error: ld returned 1 exit status
Run Code Online (Sandbox Code Playgroud)

我试图在线找到解决方案并尝试了-lgomp,-lpthreadgc2和-lpthreadvc2的变体,没有任何改进.

我以递归方式搜索了我的C:\ MinGw目录中包含lpthread的任何文件名并得到了这个:

C:\MinGW\bin\pthreadgc2.dll
C:\MinGW\bin\pthreadgce2.dll
C:\MinGW\var\cache\mingw-get\packages\pthreads-w32-2.9.1-1-mingw32-dll.tar.lzma
C:\MinGW\var\lib\mingw-get\data\mingw32-pthreads-w32.xml
Run Code Online (Sandbox Code Playgroud)

我不确定我是否错过了旗帜或包裹,或者我做错了什么.好的方法是gcc -v的输出

Using built-in specs.
COLLECT_GCC=gcc
COLLECT_LTO_WRAPPER=c:/mingw/bin/../libexec/gcc/mingw32/4.8.1/lto-wrapper.exe
Target: mingw32
Configured with: ../gcc-4.8.1/configure --prefix=/mingw --host=mingw32 --build=mingw32 --without-pic
 --enable-shared --enable-static --with-gnu-ld …
Run Code Online (Sandbox Code Playgroud)

c++ windows gcc mingw openmp

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

嵌入到 IPython 后,您可以指定要运行的命令吗?

调用IPython.embed()时可以给它一个命令或魔法函数在嵌入发生后运行。

我想运行这样的东西

import IPython
IPython.embed(command='%pylab qt4')
Run Code Online (Sandbox Code Playgroud)

我目前的解决方法是将命令字符串复制到剪贴板,生成一个后台线程,该线程发送击键 %paste 然后输入到当前窗口。这在 linux 上工作正常,但它非常笨拙,我无法让它在 Windows 上也能正常工作。似乎应该可以指定这一点,但我从未掌握 IPython 配置的工作方式或要嵌入的参数的用途。

python ipython

7
推荐指数
2
解决办法
889
查看次数

我应该每次都创建一个新的Pool对象还是重用一个?

我正在尝试使用Python的multiprocessing.Pool对象来理解最佳实践.

在我的程序中,我经常使用Pool.imap.通常每次我并行启动任务时,我都会创建一个新的池对象,然后在完成后关闭它.

我最近遇到了挂起,其中提交到池的任务数量少于进程数.奇怪的是它只发生在我的测试管道中,它之前运行了很多东西.作为独立运行测试不会导致手.我认为它与制作多个池有关.

我真的很想找到一些资源来帮助我理解使用Python多处理的最佳实践.具体来说,我目前正在尝试了解制作多个池对象与仅使用一个池对象的含义.

python multiprocessing python-multiprocessing

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

如何在Python中创建第二个None?创建一个 id 始终相同的单例对象

警告:以下问题要求提供有关不良做法和脏代码的信息。建议开发商酌情决定。

注意:这与在 Python 中创建单例问题不同,因为我们想要解决酸洗和复制以及正常的对象创建问题。

目标:我想创建一个NoParam模拟 行为的值(称为 )None。具体来说,我希望 的任何实例都NoParamType具有相同的值——即具有相同的值id——以便is运算符始终在这些值中的两个值之间返回True

原因:我有保存参数值的配置类。其中一些参数可以None作为有效类型。但是,如果未指定类型,我希望这些参数采用特定的默认值。因此我需要一些哨兵来is not None指定未指定任何参数。该哨兵必须是永远不能用作有效参数值的东西。我更愿意为这个哨兵使用特殊类型,而不是使用一些不太可能使用的字符串。

例如:

def add_param(name, value=NoParam):
    if value is NoParam:
        # do some something
    else:
        # do something else 
Run Code Online (Sandbox Code Playgroud)

但我们不必太担心原因。让我们重点关注如何做。


到目前为止我所拥有的:

我可以很容易地实现大部分这种行为。我创建了一个名为 的特殊模块util_const.py。它包含一个创建 NoParamType 的类,然后创建该类的单例实例。

class _NoParamType(object):
    def __init__(self):
        pass

NoParam = _NoParamType()
Run Code Online (Sandbox Code Playgroud)

我只是假设永远不会创建此类的第二个实例。每当我想使用值时,我import util_const就会使用util_const.NoParam.

这对于大多数情况都很有效。然而,我刚刚遇到了一个NoParam值被设置为对象值的情况。使用深度复制该对象copy.deepcopy,因此创建了第二个 NoParam 实例。

我通过定义__copy____deepcopy__方法找到了一个非常简单的解决方法

class …
Run Code Online (Sandbox Code Playgroud)

python

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

Git:如何将两次提交之间的所有提交压缩成一次提交

我有一个分支机构,过去几个月我一直在几台计算机上亲自工作.结果是一个很长的历史链,我想在将它合并到主分支之前进行清理.最终目标是摆脱我在处理服务器代码时经常做的所有wip提交.

以下是gitk历史可视化的屏幕截图:

在此输入图像描述http://imgur.com/a/I9feO

在这个底部的方式是我从主人分支的点.自从我开始这个分支以来,Master已经改变了一点,但是这些变化是不相交的,所以合并应该是小菜一碟.我通常的工作流程是重新加入master,然后压缩wip提交.

我试着执行一个简单的

git rebase -i master
Run Code Online (Sandbox Code Playgroud)

我编辑了对sqush的提交.

它似乎开始很好,但后来失败了,并希望我解决冲突.然而,似乎没有好办法通过观察差异来解决它.每个部分都使用范围中未定义的变量,因此我不确定如何解决它们.

我也试图使用git rebase -i -s recursive -X theirs master,但没有导致冲突,但是它改变了修改后的分支的HEAD状态(我想以这样的方式编辑历史记录,即HEAD中的最终结果不会改变).

我相信这些冲突来自于你可以看到钻石图案的链条部分.(例如,在重新分类的分类器......和Merge分支iccv之间).


要更好地A说出我的问题,请让" =合并分支iccv"和B="返工分类器"参考图像中的示例.中间的提交将是XY.

      ...
       |
       |
       A 
     /  \
    |   X
    Y   |
     \ /
      B
      |
      |
     ...
Run Code Online (Sandbox Code Playgroud)

我想改写历史这样的状态A是完全一样的,并有效地破坏中间表示XY,因此产生的历史是这样的

      ...
       |
       |
       A 
       |
       |
       B
       |
       | 
      ...
Run Code Online (Sandbox Code Playgroud)

有没有办法在这样的历史链中间压缩已解决的状态A,XY进入单个提交?

如果A并且B是提交的SHAID是否有一个简单的命令我可以运行(或者可能是一个脚本)来实现我想要的结果?

如果A是HEAD,我相信我能做到 …

git rebase

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

从绝对路径导入模块而不修改 sys.modules

所以,我知道我可以加载一个 python 模块,给定一个模块的文件路径

def import_module_from_fpath(module_fpath):
    from os.path import basename, splitext, isdir, join, exists, dirname, split
    import platform
    if isdir(module_fpath):
        module_fpath = join(module_fpath, '__init__.py')
    print('module_fpath = {!r}'.format(module_fpath))
    if not exists(module_fpath):
        raise ImportError('module_fpath={!r} does not exist'.format(
            module_fpath))
    python_version = platform.python_version()
    modname = splitext(basename(module_fpath))[0]
    if modname == '__init__':
        modname = split(dirname(module_fpath))[1]
    if python_version.startswith('2.7'):
        import imp
        module = imp.load_source(modname, module_fpath)
    elif python_version.startswith('3'):
        import importlib.machinery
        loader = importlib.machinery.SourceFileLoader(modname, module_fpath)
        module = loader.load_module()
        # module = loader.exec_module(modname)
    else:
        raise AssertionError('invalid python version={!r}'.format(
            python_version))
return module
Run Code Online (Sandbox Code Playgroud)

然而,这似乎总是填充 …

python import module

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

如何在本地计算机上发布适用于 Linux 的二进制 Python 轮子

我有一个包含 C 扩展的包,我想将其上传到 pypi: https: //github.com/Erotemic/netharn

我使用命令在 Ubuntu 18.04 上构建了一个轮子python setup.py bdist_wheel --py-limited-api=cp36,但是当我使用 上传时twine upload --skip-existing dist/*,却收到错误消息,它有一个不受支持的平台标签:

HTTPError: 400 Client Error: Binary wheel 'netharn-0.0.4-cp36-abi3-linux_x86_64.whl' has an unsupported platform tag 'linux_x86_64'. for url: https://upload.pypi.org/legacy/
Run Code Online (Sandbox Code Playgroud)

经过一番搜索后,我发现PEP 513需要构建一个轮子来支持manylinux(又名Centos5): https: //github.com/pypa/manylinux

他们在这里提供了一个示例:https://github.com/pypa/python-manylinux-demo/blob/master/travis/build-wheels.sh

然而,我能找到的所有示例总是使用某种 CI 服务器构建二进制文件。如果可能的话,我希望能够在本地构建它们。我认为复制 docker 命令并将其构建在我自己的机器上的 docker 容器中应该很简单。但是,我遇到了问题。(我确保删除了存储库中任何现有的构建和 dist 目录)

我做的第一件事就是将自己转入交互式 docker 会话中,这样我就可以玩东西了。我选择了 x8_64 映像并将本地目录安装到/iodocker 计算机上的代码存储库。然后我开始了交互式 bash 会话。

REPO_DPATH=$HOME/code/netharn
DOCKER_IMAGE=quay.io/pypa/manylinux1_x86_64
PRE_CMD=""
# Interactive test
docker run -it --rm -v $REPO_DPATH:/io $DOCKER_IMAGE $PRE_CMD bash
Run Code Online (Sandbox Code Playgroud)

在 docker 内部,我首先想为 …

python pypi python-wheel

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

是否可以在脚本中获取特定鹦鹉螺窗口的目录?

我想构建一个Python脚本来检查是否在nautilus中打开了特定目录。

到目前为止,我拥有的最佳解决方案是使用wmctrl -lxp列出所有窗口的方法,这使我得到如下输出:

0x0323d584  0 1006   nautilus.Nautilus     namek Downloads
0x0325083a  0 1006   nautilus.Nautilus     namek test
0x04400003  0 25536  gvim.Gvim             namek yolo_voc.py + (~/code/netharn/netharn/examples) - GVIM4
Run Code Online (Sandbox Code Playgroud)

然后,我检查感兴趣的目录的基本名称是否在nautilus.NautilusWindows的窗口名称中。

这是我刚刚描述的不完整解决方案的代码:

    def is_directory_open(dpath):
        import ubelt as ub  # pip install me! https://github.com/Erotemic/ubelt
        import platform
        from os.path import basename
        import re
        computer_name = platform.node()
        dname = basename(dpath)
        for line in ub.cmd('wmctrl -lxp')['out'].splitlines():
            parts = re.split(' *', line)
            if len(parts) > 3 and parts[3] == 'nautilus.Nautilus':
                if parts[4] == computer_name:
                    # FIXME: …
Run Code Online (Sandbox Code Playgroud)

python ubuntu nautilus wmctrl

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

Pytorch:在特定张量维度中设置索引(类似于torch.index_select)

我正在尝试获取和设置特定张量维度中的索引,如果可能的话,无需重新整形。我已经能够找到torch.index_select在获取值时执行我想要的操作的函数,但我还没有找到类似的设置函数。有吗?

对于上下文,我有一个张量和一组索引

class_energy = torch.rand(3, 10, 32, 32)
class_logits = torch.empty_like(class_energy)
idxs = [2, 3, 5, 7]
Run Code Online (Sandbox Code Playgroud)

我想访问特定维度中这些索引处的项目,以便我可以执行 log_softmax。

如果我知道暗淡的先验,那么我可以简单地使用花哨的__getitem__/__setitem__语法:例如, if dim=1, then class_energy[:, idxs]。同样,如果dim=2-> class_energy[:, :, idxs]dim=0->class_energy[idxs]等...

在 的情况下dim=1,我本质上想要这样:

class_logits[:, idxs] = F.log_softmax(class_energy[:, idxs], dim=1)
Run Code Online (Sandbox Code Playgroud)

dim不幸的是,我不知道提前的价值。当然,我可以通过以下方式提前建立精美的索引:

fancy_index = tuple([slice(None)] * dim + [idxs])
class_logits[fancy_index] = F.log_softmax(class_energy[fancy_index], dim=dim)
Run Code Online (Sandbox Code Playgroud)

但是,我想知道是否有更好的方法来做到这一点。对于 的情况__getitem__,我知道确实存在。下面的代码使用torch.index_select是等效的

fancy_index = tuple([slice(None)] * dim + …
Run Code Online (Sandbox Code Playgroud)

python pytorch

5
推荐指数
0
解决办法
2464
查看次数