我正在运行Console2,我相信它只是windows cmd的一个接口
我有一个自定义批处理文件,可以为我完成大部分脏工作,但现在有很多命令.有没有办法可以在Windows命令提示符下使用tap自动完成工作?
例如:我的脚本名为rob.bat,它接收了不同数量的参数
它想键入rob set {Tab},然后让它循环
setup_envvars setup_userprefs setup_whateverothersetupscriptsIhave
有没有办法做到这一点?
我有一个使用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) 调用IPython.embed()时可以给它一个命令或魔法函数在嵌入发生后运行。
我想运行这样的东西
import IPython
IPython.embed(command='%pylab qt4')
Run Code Online (Sandbox Code Playgroud)
我目前的解决方法是将命令字符串复制到剪贴板,生成一个后台线程,该线程发送击键 %paste 然后输入到当前窗口。这在 linux 上工作正常,但它非常笨拙,我无法让它在 Windows 上也能正常工作。似乎应该可以指定这一点,但我从未掌握 IPython 配置的工作方式或要嵌入的参数的用途。
我正在尝试使用Python的multiprocessing.Pool对象来理解最佳实践.
在我的程序中,我经常使用Pool.imap.通常每次我并行启动任务时,我都会创建一个新的池对象,然后在完成后关闭它.
我最近遇到了挂起,其中提交到池的任务数量少于进程数.奇怪的是它只发生在我的测试管道中,它之前运行了很多东西.作为独立运行测试不会导致手.我认为它与制作多个池有关.
我真的很想找到一些资源来帮助我理解使用Python多处理的最佳实践.具体来说,我目前正在尝试了解制作多个池对象与仅使用一个池对象的含义.
警告:以下问题要求提供有关不良做法和脏代码的信息。建议开发商酌情决定。
注意:这与在 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) 我有一个分支机构,过去几个月我一直在几台计算机上亲自工作.结果是一个很长的历史链,我想在将它合并到主分支之前进行清理.最终目标是摆脱我在处理服务器代码时经常做的所有wip提交.
以下是gitk历史可视化的屏幕截图:
在这个底部的方式是我从主人分支的点.自从我开始这个分支以来,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="返工分类器"参考图像中的示例.中间的提交将是X和Y.
...
|
|
A
/ \
| X
Y |
\ /
B
|
|
...
Run Code Online (Sandbox Code Playgroud)
我想改写历史这样的状态A是完全一样的,并有效地破坏中间表示X和Y,因此产生的历史是这样的
...
|
|
A
|
|
B
|
|
...
Run Code Online (Sandbox Code Playgroud)
有没有办法在这样的历史链中间压缩已解决的状态A,X并Y进入单个提交?
如果A并且B是提交的SHAID是否有一个简单的命令我可以运行(或者可能是一个脚本)来实现我想要的结果?
如果A是HEAD,我相信我能做到 …
所以,我知道我可以加载一个 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)
然而,这似乎总是填充 …
我有一个包含 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脚本来检查是否在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) 我正在尝试获取和设置特定张量维度中的索引,如果可能的话,无需重新整形。我已经能够找到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)