我有三个类:A,B和C.
C继承自A和B(按此顺序).构造函数的签名A和B不同.如何调用__init__两个父类的方法?
我在代码中的努力:
class A(object):
def __init__(self, a, b):
super(A, self).__init__()
print('Init {} with arguments {}'.format(self.__class__.__name__, (a, b)))
class B(object):
def __init__(self, q):
super(B, self).__init__()
print('Init {} with arguments {}'.format(self.__class__.__name__, (q)))
class C(A, B):
def __init__(self):
super(A, self).__init__(1, 2)
super(B, self).__init__(3)
c = C()
Run Code Online (Sandbox Code Playgroud)
产生错误:
Traceback (most recent call last):
File "test.py", line 16, in <module>
c = C()
File "test.py", line 13, …Run Code Online (Sandbox Code Playgroud) 在Rust中,这有效:
fn main() {
let a = [0; 32];
println!("{:?}", a);
}
Run Code Online (Sandbox Code Playgroud)
但这不是:
fn main() {
let a = [0; 33];
println!("{:?}", a);
}
Run Code Online (Sandbox Code Playgroud)
编译错误:
error[E0277]: the trait bound `[{integer}; 33]: std::fmt::Debug` is not satisfied
--> src/main.rs:3:22
|
3 | println!("{:?}", a);
| ^ the trait `std::fmt::Debug` is not implemented for `[{integer}; 33]`
|
= note: `[{integer}; 33]` cannot be formatted using `:?`; if it is defined in your crate, add `#[derive(Debug)]` or manually implement it
= note: required by …Run Code Online (Sandbox Code Playgroud) 如何在请求中发送以下HTTP请求?
HTTP/1.1 100 Continue
Run Code Online (Sandbox Code Playgroud)
我想在请求模块中获取负责的套接字并手动完成.像这样的东西:
requests.packages.urllib3.connectionpool.socket.socket.send(b'HTTP/1.1 100 Continue')
Run Code Online (Sandbox Code Playgroud)
但那不干净(也不会起作用).
和想法?
我正在尝试与一个进程通信(该进程本身写入标准输入和标准输出以在终端中与用户交互)并读取它的标准输入并写入它在 C 中的标准输出。
因此我尝试以编程方式替换 shell 用户。一个隐喻的例子:假设我出于某种原因想在 C 中使用 VIM。然后我还需要编写命令(stdout)并从编辑器(stdin)读取内容。
最初我认为这可能是一项微不足道的任务,但似乎没有标准方法。int system(const char *command);只是执行一个命令并将命令 stdin/stdout 设置为调用进程之一。
因为这没有任何结果,所以我查看了FILE *popen(const char *command, const char *type);但手册页指出:
由于管道根据定义是单向的,因此类型参数只能指定读或写,而不是两者;结果流相应地是只读或只写的。
及其含义:
popen() 的返回值在所有方面都是一个普通的标准 I/O 流,除了它必须用 pclose() 而不是 fclose(3) 关闭。 写入这样的流会写入命令的标准输入;该命令的标准输出与调用 popen() 的进程的标准输出相同,除非命令本身对此进行了更改。相反,从“popened”流中读取会读取命令的标准输出,并且命令的标准输入与调用 popen() 的进程的标准输入相同。
因此,使用 popen() 并不是完全不可能,但在我看来非常不优雅,因为我必须解析调用进程的标准输出(调用 popen() 的代码)才能解析从popened 命令(使用 popen 时输入“w”)。
相反,当使用类型“r”调用 popen 时,我需要写入调用进程的 stdin,以便将数据写入 popened 命令。在这种情况下,我什至不清楚这两个进程是否在标准输入中接收到相同的数据......
我只需要控制程序的标准输入和标准输出。我的意思是不能有这样的功能:
stdin_of_process, stdout_of_process = real_popen("/path/to/bin", "rw")
// write some data to the process stdin
write("hello", stdin_of_process) …Run Code Online (Sandbox Code Playgroud) 我想在安装时使用rubygems.org安装一个带有类似命令的gem来执行一些代码gem install some-gem.
该文档声明您可以使用http://docs.ruby-lang.org/en/2.2.0/Gem.html pre_install挂钩,如下所示:
# File lib/rubygems.rb, line 724
def self.pre_install(&hook)
@pre_install_hooks << hook
end
Run Code Online (Sandbox Code Playgroud)
该文件进一步指出:
RubyGems默认值存储在rubygems/defaults.rb中.如果您正在打包RubyGems或实现Ruby,您可以更改RubyGems的默认值.对于RubyGems打包器,提供lib/rubygems/defaults/operating_system.rb并覆盖lib/rubygems/defaults.rb中的任何缺省值.对于Ruby实现者,提供lib/rubygems/defaults /#{RUBY_ENGINE} .rb并覆盖lib/rubygems/defaults.rb中的任何缺省值.如果您需要RubyGems 来执行安装或卸载的额外工作,则默认覆盖文件可以设置安装前和安装后的挂钩.请参阅:: pre_install,:: pre_uninstall,:: post_install,:: post_uninstall.
这听起来正是我想要的.所以我创建了文件
我把代码
Gem.pre_install { puts 'pre install hook called!' }
Run Code Online (Sandbox Code Playgroud)
在所有列出的文件中.然后我将它们添加到gemspec中的require_paths,如下所示:
s.require_paths = ["lib", "test", "rubygems"]
Run Code Online (Sandbox Code Playgroud)
但是在安装gem时终端没有看到输出.
我究竟做错了什么?
我正在尝试在Raspberry PI ARM机器上运行为Android编译的ARM共享对象二进制文件(在.apk中找到).
不幸的是,二进制文件是封闭源代码,我不能为在Rasberry pi上运行的操作系统重新编译它(raspian,debian derived)
快速提问:是否可以在raspberry pi上运行这样的.so编译?我在这里上传了二进制文件:http://www.speedyshare.com/MSXq9/libfoo.so(很抱歉下载不方便).
我发现这个类似的问题在Linux ARM上为Android运行ARM二进制文件,它表明二进制文件不会在其他unix发行版上运行(我在我的树莓上使用debian,raspian的推导),因为android的c库是Bionic.
可以在debian上安装bionic吗?我怎么能设法运行这个库?
如果我想运行/加载libfoo.so,则在rasbperry机器上生成以下所有输出.
当我尝试在python中加载.so文件时(之前,我相应地设置了LD_PRELOAD)
import ctypes
import os
path = os.path.dirname(os.path.realpath(__file__))
print ctypes.cdll.LoadLibrary('libfoo.so')
Run Code Online (Sandbox Code Playgroud)
我得到一个OSError:libfoo.so:无法打开共享对象文件:没有这样的文件或目录.
但在查看strace输出之后,似乎加载器无法加载libfoo.so并因此失败并带有轻微的误导性错误消息没有这样的文件或目录(找到所有.so并且加载器尝试加载它,但是失败这样做).
当发出readelf -h libfoo.so时,我得到了
root@raspberrypi:/home/pi# readelf -h libfoo.so
ELF Header:
Magic: 7f 45 4c 46 01 01 01 00 00 00 00 00 00 00 00 00
Class: ELF32
Data: 2's complement, little endian
Version: 1 (current)
OS/ABI: UNIX - System V
ABI Version: 0 …Run Code Online (Sandbox Code Playgroud)