小编Jea*_*one的帖子

什么是Windows等效的pwd.getpwnam(用户名).pw_dir?

Python pwd模块提供对getpwnam(3)POSIX API的访问,POSIX API可用于通过用户名获取特定用户的主目录,以及确定用户名是否有效. pwd.getpwnam如果使用不存在的用户名调用,则会引发异常.

起初,似乎可以通过跨平台方式实现相同的结果os.path.expanduser('~username').但是,似乎在Windows XP上使用Python 2.6,这实际上不会导致不存在的用户名失败.此外,在Windows XP上的Python 2.5上,即使对于有效用户来说似乎也失败了.

可以在Windows上可靠地获取此信息吗?怎么样?

python windows home-directory

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

ImportError:没有名为twisted的模块

我是python和扭曲的新手,我试图运行一个简单的扭曲脚本但失败了.

我的环境:

MacOX 10.7.2 + Python 2.7.1 + Twisted 11.0.0 + eclipse + PyDev

该脚本名为test.py:

from twisted import reactor
reactor.run()
Run Code Online (Sandbox Code Playgroud)

我试着在终端上运行它,一切正常.

然后我打开eclipse并创建了一个新的PyDev项目,然后添加了一个名为test.py的py文件并输入上面的代码.

当我试图运行它时,我得到的错误如下:

Traceback (most recent call last):
File "/Users/user/Documents/workspace/TwistedDemo/test.py", line 2, in <module>
from twisted import reactor
ImportError: No module named twisted
Run Code Online (Sandbox Code Playgroud)

然后我检查了PYTHONPATH并在外部库选项卡中添加了"扭曲的源文件夹",但错误仍然存​​在.(没有改变)

希望有人可以帮助我,在此先感谢:)

python pydev

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

如何为twisted defer添加超时

from twisted.internet import reactor
from twisted.internet import threads
from twisted.internet import defer
import time

def worker(arg):
    print 'Hello world'
     time.sleep(10)
    return 1

def run():
    print 'Starting workers'
    l = []
    for x in range(2):
        l.append(threads.deferToThread(worker, x))
    return defer.DeferredList(l)

def res(results):
    print results
    reactor.stop()

d = run()
d.addCallback(res)
reactor.run()

如何通过超时停止工人?

python twisted

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

如何使用MsgWaitForMultipleObjects可靠地检测断开连接的TCP套接字?

扭曲包括在顶部实施的反应堆MsgWaitForMultipleObjects.显然,反应堆在TCP连接何时结束时可靠地注意到,至少在对等体发送一些字节然后快速关闭连接的情况下.似乎发生的事情是:

  1. 反应器调用MsgWaitForMultipleObjects一些套接字句柄和QS_ALLINPUT.
  2. 调用完成并指示处于此状态的套接字的句柄(即,具有等待读取且已被对等方关闭的字节)处于活动状态.
  3. reactor将此通知分派给公共TCP实现.
  4. TCP实现从套接字读取可用字节.有一些,它们被交付给应用程序代码.
  5. 控制返回到反应堆,最终MsgWaitForMultipleObjects再次调用.
  6. MsgWaitForMultipleObjects永远不再表示句柄处于活动状态.TCP实现永远不会再次查看套接字,因此它永远不会检测到连接已关闭.

这使它看起来好像MsgWaitForMultipleObjects是边缘触发的通知机制.在MSDN文档说:

Waits until one or all of the specified objects are in the signaled state
or the time-out interval elapses.
Run Code Online (Sandbox Code Playgroud)

这听起来不像是边缘触发.这听起来像是水平触发.

MsgWaitForMultipleObjects实际边沿触发?或者它是否被水平触发,这种不当行为是由其行为的其他方面引起的?

附录 WSAEventSelect的MSDN文档解释了这里发生了什么,包括指出这FD_CLOSE基本上是一次性事件.在发出一次信号之后,你再也不会得到它了.这在某种程度上解释了为什么Twisted有这个问题.不过,我仍然有兴趣听听如何有效地使用MsgWaitForMultipleObjects这个限制.

python windows networking twisted reactor

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

一个单元如何测试Python/C API的错误条件,如PyType_Ready和PyObject_New?

单元测试用C编写的Python扩展模块是相当简单的(如果单调乏味),包括许多Python/C API的错误情况,例如PyArg_ParseTuple.例如,启动实现Python函数或方法的C函数的惯用方法如下:

    if (!PyArg_ParseTuple(args, "someformat:function_name")) {
        return NULL;
    }
Run Code Online (Sandbox Code Playgroud)

通过使用正确的参数数量和类型调用函数,可以对此成功案例进行单元测试.也可以通过首先使用错误数量的参数调用函数来测试失败情况,然后调用正确数量的参数,但传递错误类型的值.这导致C代码的完整分支测试覆盖.

但是,目前尚不清楚如何为其他Python/C API运用否定路径.在C扩展中开始模块初始化的惯用方法如下:

    if (PyType_Ready(&Some_Extension_Structure) < 0) {
        return 0;
    }
Run Code Online (Sandbox Code Playgroud)

怎么可能PyType_Ready失败?类似地,用于分配扩展类型的新实例的C函数经常使用如下API PyObject_New:

    self = PyObject_New(Some_Structure, &Some_Extension_Structure);
    if (self == NULL) {
        return NULL;
    }
Run Code Online (Sandbox Code Playgroud)

一个单元如何测试这种负面情况(特别是考虑PyObject_New到在单个单元测试方法的执行过程中可能会使用很多次?)

似乎有可能构建一个通用的解决方案,依赖于动态链接器技巧,例如LD_PRELOAD提供这些C API的假货,这些C API可以在正确的时间以正确的方式指向失败.但是,构建这样的系统的成本似乎有点遥不可及.有其他人已经完成它并使结果可用吗?

是否有特定于Python/C的技巧可以使这种测试更容易?

我应该完全考虑其他一些方面吗?

c python unit-testing

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

如何提供 C 库以在 NixOS 上堆栈?

我有一个基于堆栈的项目,它依赖于几个 C 库。其中一个 C 库 zlib 可从原生 NixOS 包中获得,我可以将其放入 stack.yaml 的 nix 部分:

nix:
  enable: true
  packages:
    - "zlib"
Run Code Online (Sandbox Code Playgroud)

另一个不是nixpkgs 的一部分。堆栈文档建议使用 中的nix部分的替代方法stack.yaml是“编写 shell.nix”而无需详细说明。

于是写了一篇,坚持以zlib为例:

{ pkgs ? import <nixpkgs> { } }:
  pkgs.mkShell {
    buildInputs = [
      pkgs.pkgconfig
      pkgs.zlib
      pkgs.stack
    ];
  }
Run Code Online (Sandbox Code Playgroud)

这为我提供了 zlib 的工作 pkg-config:

[nix-shell:~/Work/PrivateStorage/PaymentServer]$ pkg-config --modversion zlib
1.2.11
Run Code Online (Sandbox Code Playgroud)

但是,似乎并没有让堆栈能够找到库:

[nix-shell:~/Work/PrivateStorage/PaymentServer]$ stack build
zlib-0.6.2: configure
Progress 1/7

--  While building package zlib-0.6.2 using:
      /home/exarkun/.stack/setup-exe-cache/x86_64-linux-nix/Cabal-simple_mPHDZzAJ_2.4.0.1_ghc-8.6.5 --builddir=.stack-work/dist/x86_64-linux-nix/Cabal-2.4.0.1 configure --with-ghc=/nix/store/zfpm9bai9gj8vs09s2i2gkhvgsjkx13z-ghc-8.6.5/bin/ghc --with-ghc-pkg=/nix/store/zfpm9bai9gj8vs09s2i2gkhvgsjkx13z-ghc-8.6.5/bin/ghc-pkg --user --package-db=clear --package-db=global --package-db=/home/exarkun/.stack/snapshots/x86_64-linux-nix/lts-14.1/8.6.5/pkgdb …
Run Code Online (Sandbox Code Playgroud)

haskell compiler-errors pkg-config nixos haskell-stack

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

如何向 GitLab Terraform 提供程序提供 API 令牌作为 Terraform 秘密资源?

我正在尝试使用 Terraform 来管理一些 GitLab(自托管)配置。Terraform GitLab 提供程序需要一个 GitLab 个人访问令牌才能进行 API 调用以读取和写入配置。当我尝试使用 Terraform 提供此令牌时,secret_resourceTerraform 无法让我管理秘密。当我尝试导入机密时,Terraform 失败:

$ terraform import secret_resource.api_token "xxx"                                                                                        
secret_resource.api_token: Importing from ID "xxx"...
secret_resource.api_token: Import prepared!
  Prepared secret_resource for import
secret_resource.api_token: Refreshing state... [id=-]

Error: GET https://gitlab.example.com./api/v4/user/api/v4/user: 404 {error: 404 Not Found}

  on /path/to/providers.tf line 24, in provider "gitlab":                                                                                                          
  24: provider "gitlab" {

Run Code Online (Sandbox Code Playgroud)

这是重现此行为的最小 Terraform:

terraform {
  required_version = "~> 0.13.6"                                                                                     

  required_providers {
    gitlab = {
      source = "nixpkgs/gitlab"
      version = "> 3.4.99"                                                                                           
    }
    secret = { …
Run Code Online (Sandbox Code Playgroud)

credentials terraform terraform-provider-gitlab terraform-provider-secrets

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

CI 作业在 GitLab-runner 上间歇性失败,并出现错误“致命:浅文件自我们读取以来已更改”

我的自托管 GitLab 部署上的作业最近有时开始失败,出现以下 git 错误:

完整作业日志的示例如下:

Running with gitlab-runner 13.12.0 (v13.12.0)
  on ....50ab V...
Preparing the "shell" executor
00:00
Using Shell executor...
Preparing environment
00:00
Running on saxtons...
Getting source from Git repository
00:03
$ /nix/store/s0frm5z2k43qm66q39ifl2vz96hmyxg4-pre-clone
Fetching changes with git depth set to 50...
Reinitialized existing Git repository in /var/lib/private/gitlab-runner/builds/V.../2/privatestorage/PrivateStorageio/.git/
fatal: shallow file has changed since we read it
Cleaning up file based variables
00:00
ERROR: Job failed: exit status 1
Run Code Online (Sandbox Code Playgroud)

预克隆脚本包含此内容,用于修复不可写目录的权限,这些目录会导致运行程序尝试清理 git checkout 失败:

chmod --recursive u+rwX …
Run Code Online (Sandbox Code Playgroud)

git gitlab nixos gitlab-ci gitlab-ci-runner

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

在加权网络中找到"渗透"阈值的算法

我有一些状态通过转移概率链接(嵌入在马尔可夫链中的转换矩阵中).我想通过仅考虑足够高的概率来总结这个转移矩阵,它们允许从一个状态(〜节点)转到另一个状态(在我的转换矩阵中的第一个和最后一个).一个阈值,这样如果我只考虑更高的概率,我的转换矩阵永远不会允许从第一个状态(或节点)移动.

两个问题:

是否有一些众所周知的库(优先是python语言)实现这种方法?我的天真/经验/原型方法将是一个减少阈值的循环,然后检查我是否可以从第一个状态流到最后一个状态(距离矩阵中的最佳路径算法?).但这可能需要非常高的计算时间?

Example 1: 
DistMatrix = [[       'a',   'b',     'c',    'd'], 
             ['a',  0,      0.3,    0.4,    0.1],
             ['b',   0.3,    0,      0.9,    0.2],
             ['c',   0.4,    0.9,    0,      0.7],
             ['d',   0.1,    0.2,    0.7,   0]]  
    states are a,b,c,d. I want to find the value (threshold) that allow to go from a to d (no matter if other states are walked)  
    Naive approach:
    - first loop: threshold 0.9, I get rid of lesser probabilities: I can only connect c and b 
    - second …
Run Code Online (Sandbox Code Playgroud)

python analysis networkx

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

如何使用 GraphQL 界面从 GitLab 部署中检索所有用户?

我正在尝试从 GitLab 加载用户信息,以便我可以将用户名与问题相关联。查询问题时,受让人用户名不是直接可用的。相反,用户 ID 可用。

如果我使用/-/graphql-explorerGitLab 部署上的端点执行此 GraphQL 查询:

query {                                                                                                                                                                                       
  users {                                                                                                                                                                                     
    nodes {                                                                                                                                                                                   
      id                                                                                                                                                                                      
      name                                                                                                                                                                                    
      username                                                                                                                                                                                
    }                                                                                                                                                                                         
  }
}
Run Code Online (Sandbox Code Playgroud)

然后返回 91 个用户。不过,这显然不是部署中的所有用户。我知道有些用户存在,但未包含在结果中。我可以使用这个 GraphQL 查询单独查询它们:

query {
  user(username: "someusername") {
    id
  }
}
Run Code Online (Sandbox Code Playgroud)

并收到似乎正确描述用户的结果。

为什么此查询的结果中省略了某些用户?我知道大型结果集需要处理分页,但默认页面大小应该是 100,我收到的结果比这少。此外,如果我pageinfo在结果之后请求并询问用户,endCursor我将不会收到任何物品。

如何提交查询以获取所有用户?如果做不到这一点,我如何提交一个查询来获取所有可能是 aa 组的受让人(或者,如果失败,则是项目列表)的所有用户?

gitlab graphql gitlab-api

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