草庐IT

PyObject_Call

全部标签

python - Boost.Python 向现有 PyObject 添加绑定(bind)(用于异常处理)

为了以实际可行的方式向Python公开C++异常,您必须编写如下内容:std::stringscope=py::extract(py::scope().attr("__name__"));std::stringfull_name=scope+"."+name;PyObject*exc_type=PyErr_NewException(&full_name[0],PyExc_RuntimeError,0);//...但这似乎不会与Boost.Python中的任何其他内容交互。如果我想公开:structError{intcode;};我可以写:py::class_("Error",py::n

Python 函数及其 __call__ 属性

我正在使用Python2.7.2。我想了解调用函数和调用函数的__call__属性之间的关系。例如,考虑以下代码deffoo():return5printfoo()#==>5printfoo.__call__()#==>5foo.__call__=lambda:6printfoo()#==>5printfoo.__call__()#==>6前四行似乎表明调用函数foo与调用foo的__call__属性相同。然而,最后三行似乎表明它们是不同的野兽,因为我更改了__call__属性,但它没有更改调用foo()返回的值.谁能解释一下调用foo()和调用foo.__call__()之间的关系?

python - 如何获取 PyObject 的引用计数?

如何从C++获取PyObject的引用计数?有函数Py_INCREF和Py_DECREF可以增加/减少它,但我还没有找到返回对象引用计数的函数。我需要它来进行调试。 最佳答案 每个对象的引用计数都存储在PyObject本身的一个名为ob_refcnt的变量中.您可以直接访问它。typedefstruct_object{_PyObject_HEAD_EXTRAPy_ssize_tob_refcnt;#Referencecountstruct_typeobject*ob_type;}PyObject;或者,您可以使用Py_REFCNTM

python - subprocess.call 环境变量

我正在使用Popen,因为我需要环境,如下所示:Popen(["boto-rsync","..."],env={"PATH":"/Library/Frameworks/Python.framework/Versions/2.7/bin/"},)问题是Popen将命令作为新线程运行。有什么方法可以将env传递给subprocess.call或阻止Popen创建新线程?谢谢 最佳答案 您可以使用与popen完全相同的方式调用env:subprocess.call(["boto-rsync","..."],env={"PATH":"/Li

python - 在 Windows 上的 Python 2.7.2 中使用 subprocess.call() 的问题

我正在尝试以下操作,但失败并出现错误。我试图通过在控制台上调用python从Windows控制台上的Pythonshell/脚本/运行它。似乎没有任何效果。总是同样的错误。fromsubprocessimportcall>>>pat="d:\info2.txt">>>call(["type",pat])>>>Traceback(mostrecentcalllast):File"",line1,incall(["type",pat])File"C:\Python27\lib\subprocess.py",line493,incallreturnPopen(*popenargs,**kwa

python subprocess.call() "no such file or directory"

我在该模块上发现了一些问题,但更常见的问题似乎是让参数列表正确,我认为我已经(最终)管理好了我正在尝试运行一个程序,该程序需要在命令行中输入这样的内容,fits2ndfinout“in”是要转换的文件的文件路径,“out”是保存结果的路径和文件名。所以使用子进程,subprocess.call(["fits2ndf","/media/tom_hdd/Transfer/reference.fits","/media/tom_hdd/Transfer/reference.sdf"])这提高了,Traceback(mostrecentcalllast):File"",line1,inFile

python - 我什么时候应该实现 __call__

在python中,您可以通过实现__call__方法使实例可调用。例如classBlah:def__call__(self):print"hello"obj=Blah()obj()但我也可以实现自己的方法,比如“运行”:classBlah:defrun(self):print"hello"obj=Blah()obj.run()我什么时候应该实现__call__? 最佳答案 这很难回答。我的意见是你永远不应该定义__call__除非你的实际目标是创建一个函数。这不是您在创建传统对象后会做的事情。换句话说,如果您一开始就想“我要创建一个

python - 我什么时候应该实现 __call__

在python中,您可以通过实现__call__方法使实例可调用。例如classBlah:def__call__(self):print"hello"obj=Blah()obj()但我也可以实现自己的方法,比如“运行”:classBlah:defrun(self):print"hello"obj=Blah()obj.run()我什么时候应该实现__call__? 最佳答案 这很难回答。我的意见是你永远不应该定义__call__除非你的实际目标是创建一个函数。这不是您在创建传统对象后会做的事情。换句话说,如果您一开始就想“我要创建一个

python - 什么时候使用 __call__ 是个好主意?

人们对使用__call__有何看法。我很少看到它被使用,但我认为当你知道一个类将用于某些默认行为时,它是一个非常方便的工具。 最佳答案 我认为你的直觉是对的。从历史上看,可调用对象(或者我有时听说过的“仿函数”)已在OO世界中用于模拟闭包。在C++中,它们通常是不可或缺的。然而,__call__在Python世界中的竞争相当激烈:一个常规的命名方法,它的行为有时可以更容易地从名称中推断出来。可以转换为绑定(bind)方法,可以像函数一样调用。闭包,通过返回嵌套block中定义的函数获得。一个lambda,这是一种有限但快速的闭包方法

python - 什么时候使用 __call__ 是个好主意?

人们对使用__call__有何看法。我很少看到它被使用,但我认为当你知道一个类将用于某些默认行为时,它是一个非常方便的工具。 最佳答案 我认为你的直觉是对的。从历史上看,可调用对象(或者我有时听说过的“仿函数”)已在OO世界中用于模拟闭包。在C++中,它们通常是不可或缺的。然而,__call__在Python世界中的竞争相当激烈:一个常规的命名方法,它的行为有时可以更容易地从名称中推断出来。可以转换为绑定(bind)方法,可以像函数一样调用。闭包,通过返回嵌套block中定义的函数获得。一个lambda,这是一种有限但快速的闭包方法