小编Mac*_*Mac的帖子

Python POST二进制数据

我正在编写一些与redmine接口的代码,我需要上传一些文件作为过程的一部分,但我不知道如何从包含二进制文件的python中执行POST请求.

我试图在这里模仿命令:

curl --data-binary "@image.png" -H "Content-Type: application/octet-stream" -X POST -u login:password http://redmine/uploads.xml
Run Code Online (Sandbox Code Playgroud)

在python(下面)中,它似乎不起作用.我不确定问题是否与编码文件有关,或者标题是否有问题.

import urllib2, os

FilePath = "C:\somefolder\somefile.7z"
FileData = open(FilePath, "rb")
length = os.path.getsize(FilePath)

password_manager = urllib2.HTTPPasswordMgrWithDefaultRealm()
password_manager.add_password(None, 'http://redmine/', 'admin', 'admin')
auth_handler = urllib2.HTTPBasicAuthHandler(password_manager)
opener = urllib2.build_opener(auth_handler)
urllib2.install_opener(opener)
request = urllib2.Request( r'http://redmine/uploads.xml', FileData)
request.add_header('Content-Length', '%d' % length)
request.add_header('Content-Type', 'application/octet-stream')
try:
    response = urllib2.urlopen( request)
    print response.read()
except urllib2.HTTPError as e:
    error_message = e.read()
    print error_message
Run Code Online (Sandbox Code Playgroud)

我有权访问服务器,它看起来像编码错误:

...
invalid byte sequence in UTF-8
Line: 1
Position: …
Run Code Online (Sandbox Code Playgroud)

python rest post urllib2 redmine

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

Doxygen用于多语言API

我公司开发了工程程序API.它是用C++开发的,但我们为以下语言创建了包装器:

  • 一种类似于VB的专有语言
  • MATLAB
  • 和Python.

目前,文档是由一堆脚本生成的,并且开始耗费时间来保持100%.我想知道是否有办法让doxygen/sphinx或其他程序一次性生成C/C++,VB和MATLAB的文档.Python部分由SWIG完成.目前的输出是这样的:

  • NameOfFunction
  • VB:
  • 函数NameOfFunction(ByVal a As Long,ByRef b()As Long,ByVal c As Long)As Long
  • MATLAB:
  • value = NameOfFunction(a,b(),c)
  • C/C++:
  • value*NameOfFunction(objtype1*a,objecttype2*b [],int c)
  • +说明
  • +例子

c++ vb6 matlab doxygen python-sphinx

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

为什么Qt信号不是常数

Qt使用信号和插槽进行对象通信.信号通常被声明为成员函数,然后Qt MOC生成该函数的定义.

我想了解的是为什么信号不是const成员函数?

编辑:我希望信号不会修改发件人,这就是问题的原因.

c++ qt signals-slots

9
推荐指数
2
解决办法
2534
查看次数

如何"超载"python的"全局"打印功能?

我使用python 2.6.6,我需要重载默认的python打印功能.我需要这样做,因为此代码可用于必须使用内置函数生成输出的系统,否则不显示输出.

所以,例如,如果你有一个像这样的python脚本:

from __future__ import print_function

def NewPrint(Str):
    with open("somefile.txt","a") as AFile:
        AFile.write(Str)

def OverloadPrint():
    global print
    print = NewPrint

OverloadPrint()
print("ha")
Run Code Online (Sandbox Code Playgroud)

它工作正常."重载"打印的输入位于NewPrint指定的文件中.

现在考虑到这一点,我希望能够在上面的几行中运行并打印以执行NewPrint在整个脚本执行期间所做的事情.现在,如果我从另一个使用print的模块调用一个函数,它将使用内置的print而不是我刚刚覆盖的那个.我想这与命名空间和内置函数有关,但我的python不够好.

编辑:

我试着保持简单,但看起来这样会造成更多的混乱......

  1. 重载打印的功能将打印到GUI,因此如果函数过载,则无需关心重定向.
  2. 我知道我的例子没有做打印功能实际做的事情.我如何考虑编码它的一个更好的例子是(我知道仍然不是很好):

    def hli_print(*args, **kw):
        """
        print([object, ...], sep=' ', end='\n', file=sys.stdout)
        """
        sep = kw.get('sep', ' ')
        end = kw.get('end', '\n')
        File = kw.get('file', sys.stdout)
        args = [str(arg) for arg in args]
        string = sep.join(args) + end
        File.write(string)
        hli_Print(string)
    
    Run Code Online (Sandbox Code Playgroud)
  3. 从上面的2开始,您可以看到我必须使用的功能打印到GUI"hli_Print"它是一个通过swig包装器公开的C++函数.

  4. 我们只使用标准库和我们自己的swig包装器,我们的开发人员也使用print作为函数(习惯于3.X).所以我并没有真正担心其他一些模块调用print而不是其他的东西.

从所有的评论我想只是使用一些print_()函数而不是print()(这是我们目前做的)可能是最好的,但我真的很好奇,看看在python中是否有可能做我做的事情描述.

python namespaces python-2.6

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

如何撤消git合并,但保留历史记录

我们的存储库有一个主分支,但似乎我们的一个同事有一个具有不同历史的主分支.昨天他把他的主人合并成了主人并推了推.所以今天我们中的一些人已经开始工作了.当我们意识到这个问题已经过了几个小时的工作......

所以我的问题是如何撤消他的合并,但仍然保持今天的代​​码更改?左侧是我们目前的状态,右侧是我正在拍摄的.我应该改变吗?或者有办法撤消合并?什么是最好的方法?

在此输入图像描述

编辑1:我不认为这是Undo一个尚未推送的Git合并的副本,因为提交被推送到原点以及我有其他提交错误后我想保留历史记录.

编辑2:我试图改变,问题是新手在过去的两周内融入了他的主分支......所以即使我还原我也没有摆脱他创造的新"时间轴"......我只要我摆脱他的时间表,重写历史没有问题......

在此输入图像描述

编辑3:

最后,我最终找到了一个未受影响的存储库版本,并回复了事件发生后所做的修改......

git

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

Gerrit + GitLab的CI

我们一直在使用Gerrit进行代码审查,但现在我们希望将GitLab的CI用作代码审查审阅者之一.基本上,如果GitLab CI构建成功,则审核将通过GitLab CI表示的用户.

我想我可以设置几个钩子来让两个系统都能说话,但是我想知道是否有人已经这样做了和/或是否有人可以给我指示如何让它运行.

git gerrit gitlab gitlab-ci

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

ctypes引用双指针

我有一个C函数,doxygen看起来像这样:

long function( classA * obj1,
               classB * obj2,
               classC ** obj3,
               long value,
               const char * name1,
               const char * name2,
               classD ** obj4,
               classD ** obj5,
               classD ** obj6 
               )    
Run Code Online (Sandbox Code Playgroud)

我需要从python中调用它并获取最后3个参数传递给另一个dll.目前我可以调用DLL,但如果我尝试将最后3个参数传递给另一个函数,我会得到如下错误:

WindowsError: exception: access violation writing 0x0000000000000000
Run Code Online (Sandbox Code Playgroud)

我可能在ctypes方面做错了什么,我会很感激如何使用它......

第二个DLL看起来像这样:

int function2(ClassD *  obj4)   
Run Code Online (Sandbox Code Playgroud)

目前我"汇集"了这样的最后3个参数:

  temp=ctypes.c_long*1
  obj = temp(0)
Run Code Online (Sandbox Code Playgroud)

还有,从ctypes到swig有什么办法吗?显然我可以使用long函数做相反的事情.

python ctypes

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

python请求和cx_freeze

我试图冻结一个取决于请求的python应用程序,但我收到以下错误:

Traceback (most recent call last):
  File "c:\Python33\lib\site-packages\requests\packages\urllib3\util.py", line 630, in ssl_wrap_socket
    context.load_verify_locations(ca_certs)
FileNotFoundError: [Errno 2] No such file or directory
Run Code Online (Sandbox Code Playgroud)

看起来很难找到带有可执行文件的ssl证书.我发现似乎是同样的问题,但我无法弄清楚他们是如何让它工作的.主要问题似乎是请求捆绑的证书不会复制到压缩库.因此,我似乎必须强制cx_freeze捆绑证书,然后从我的脚本指向它.

从这个简单的脚本开始一切正常:

import requests
r = requests.get("https://yourapihere.com")
print(r.json())
Run Code Online (Sandbox Code Playgroud)

然后,如果我添加证书文件我stat获取错误:

import requests
r = requests.get("https://yourapihere.com", cert=requests.certs.where())
print(r.json())
Run Code Online (Sandbox Code Playgroud)

-

Traceback (most recent call last):
  File "c:\Python33\lib\site-packages\requests\packages\urllib3\connectionpool.py", line 480, in urlopen
    body=body, headers=headers)
  File "c:\Python33\lib\site-packages\requests\packages\urllib3\connectionpool.py", line 285, in _make_request
    conn.request(method, url, **httplib_request_kw)
  File "c:\Python33\lib\http\client.py", line 1065, in request
    self._send_request(method, url, body, headers)
  File "c:\Python33\lib\http\client.py", line 1103, in _send_request
    self.endheaders(body)
  File …
Run Code Online (Sandbox Code Playgroud)

python cx-freeze python-requests

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

为什么git revert在这个例子中失败了?

一位同事正在玩git revert今天他结束了一个奇怪的情况:

git init
echo 1 > file.txt
git add file.txt
git commit -m "Commit 1"
# Say this generates hash aaa

cat file
1

echo 2 >> file.txt
git add file.txt
git commit -m "Commit 2"
# Say this generates hash bbb

cat file
1
2

echo 3 >> file.txt
git add file.txt
git commit -m "Commit 3"
# Say this generates hash ccc

cat file
1
2
3

git revert bbb
#line above does not work
Run Code Online (Sandbox Code Playgroud)

恢复工作不起作用,并最终采取樱桃挑选的情况.我期待以下结果:

cat …
Run Code Online (Sandbox Code Playgroud)

git

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

为对象创建"瘦"结构包装器的正确方法是什么?

我正在玩这个问题的答案,我在clang和gcc之间得到了不同的结果.使用以下代码:

#include <iostream>
#include <vector>

using namespace std; // for rbegin() and rend()

template <typename T>
struct reversion_wrapper { T& iterable; };

template <typename T>
auto begin(reversion_wrapper<T> w) { return rbegin(w.iterable); }

template <typename T>
auto end(reversion_wrapper<T> w) { return rend(w.iterable); }

template <typename T>
reversion_wrapper<T> reverse(T&& iterable) { return { iterable }; }

int main() {

    auto z = reverse(vector<int>{1, 2, 3});
    cout << z.iterable.size() << '\n';

    vector<int> a{ 1, 2, 3 };
    auto x = reverse(a); …
Run Code Online (Sandbox Code Playgroud)

c++ c++11

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