Articles of python

如何在Ipython 5.0.0中设置特定的vim绑定

我明白,因为Ipython 5.0.0使用新的input库(prompt_toolkit),它不再默认为.inputrc(* nix)中指定的编辑器模式。 该选项必须在Ipythonconfiguration文件configuration文件中设置(请参阅https://stackoverflow.com/a/38329940/2915339 )。 我的问题是:在configuration文件configuration文件中设置vi模式,如何指定特定的键绑定? 比如,我喜欢用'jk'来逃避。

创build一个Cron作业 – Linux / Python

嗨,我有一个Django脚本,我需要运行, 我认为这些命令可以通过bash调用。 事情是脚本在很长一段时间后导致内存泄漏,所以我想创build一个调用Python脚本的外部cron作业。 因此,脚本将终止并重新启动,同时重新获得丢失的内存。 有人能指出我正确的方向吗? 我对这个问题知之甚less,感觉有点失落。

我如何使python程序检查linux服务

我想制作简单的python脚本,我可以在cron作业上运行。 我只想看看这些服务是否正在运行或停止 Httpd mysql 我应该如何检查他们与python。 我需要parsingnetstat -tlnp的输出

为什么我的Python应用程序停滞在“系统”/内核CPU时间

首先我不确定是否应该把这个作为一个Ubuntu问题或这里。 但我猜测这是一个Python问题,而不是一个OS问题。 我的Python应用程序运行在64位核心AMD服务器上的Ubuntu之上。 它通过ctypes呼叫一个.so来从networking上的5 GigE摄像机中提取图像,然后处理它们。 我在我的应用程序中看到频繁的暂停,导致相机的帧被外部相机库丢弃。 为了进行debugging,我使用了stream行的psutil Python包,每隔0.2秒在一个单独的线程中注销CPU统计信息。 我在那个线程中睡了0.2秒,当这个睡眠时间更长的时候,我也看到相机的镜头被丢弃了。 我已经看到了长达17秒的停顿! 我的大多数处理是在OpenCV或Numpy(都释放GIL)或在应用程序的一部分multiprocessing.Pool与59进程(这是为了解决Python的GIL)。 我的debugging日志logging在暂停发生时,在我的进程的很multithreading上显示了非常高的“系统”(即内核)CPU时间。 例如。 我看到的CPU时间如下(通常每0.2秒),然后突然一个大的跳跃('进程'的数字在CPU利用率,即1个CPU完全使用将1,Linux top显示123%将1.2): Process user | Process system | OS system % | OS idle % 19.9 | 10.5 | 6 | 74 5.6 | 2.3 | 4 | 87 6.8 | 1.7 | 11 | 75 4.6 | 5.5 | 43 | […]

在没有PYTHONPATH的情况下,什么是PYTHONPATH?

我需要添加一个新的目录位置到我的PYTHONPATH ,但问题是我在一个干净的,新安装的系统(Linux)没有PYTHONPATH尚未定义。 我已经阅读并使用了PYTHONPATH并且我认为我理解的很好,但是当不存在PYTHONPATH时我不知道发生了什么。 我不能附加到不存在的东西,但我希望当前发现的所有重要的库仍然工作,所以要谨慎,从Python内我print str(sys.path)以获得所有的标准值。 然后我为PYTHONPATH定义了一个envvariables,包括我刚才find的所有节点,以及我的新目录。 但是哇有很多东西停止工作! Python是如此混乱的新envvariables,我不得不删除它,在这一点上,一切再次运作。 对于错误的PYTHONPATH ,系统很困惑,甚至在提示符下键入错误的命令时,甚至找不到错误消息。 我的问题不是简单的像一个遗漏冒号,或者当我使用冒号时使用分号; 我检查了。 另外我的新目录不会导致问题,因为即使没有新的节点问题仍然存在。 所以任何人都可以解释为什么这种方法不起作用? %%%%%%%%%%%%%%%%%%%%%%%%%%%%% 下面我根据要求提供额外的细节,但不需要再读,我认为问题是固定的。 关于PYTHONPATH中列出的节点没有覆盖所有“标准”节点,而是成为新的附加条目(我相信,所以我们可以控制先发制人)是关键。 从头开始,定义没有PYTHONHOME或PYTHONPATH,在Python中导致: print ':'.join(sys.path) :/usr/lib/python2.7:/usr/lib/python2.7/plat-linux2:/usr/lib/python2.7/lib-tk:/usr/lib/python2.7/lib-old:/usr/lib/python2.7/lib-dynload:/usr/local/lib/python2.7/dist-packages:/usr/lib/python2.7/dist-packages:/usr/lib/python2.7/dist-packages/PIL:/usr/lib/python2.7/dist-packages/gst-0.10:/usr/lib/python2.7/dist-packages/gtk-2.0:/usr/lib/python2.7/dist-packages/ubuntu-sso-client 使用这个作为PYTHONPATH(即,在调用Python之前定义一个envvariables),即使没有明确使用Python,也会导致运行很糟糕的命令提示符。 例如: $> export PYTHONPATH='/usr/lib/python2.7:/usr/lib/python2.7/plat-linux2:/usr/lib/python2.7/lib-tk:/usr/lib/python2.7/lib-old:/usr/lib/python2.7/lib-dynload:/usr/local/lib/python2.7/dist-packages:/usr/lib/python2.7/dist-packages:/usr/lib/python2.7/dist-packages/PIL:/usr/lib/python2.7/dist-packages/gst-0.10:/usr/lib/python2.7/dist-packages/gtk-2.0:/usr/lib/python2.7/dist-packages/ubuntu-sso-client' $> echo $PYTHONPATH /usr/lib/python2.7:/usr/lib/python2.7/plat-linux2:/usr/lib/python2.7/lib-tk:/usr/lib/python2.7/lib-old:/usr/lib/python2.7/lib-dynload:/usr/local/lib/python2.7/dist-packages:/usr/lib/python2.7/dist-packages:/usr/lib/python2.7/dist-packages/PIL:/usr/lib/python2.7/dist-packages/gst-0.10:/usr/lib/python2.7/dist-packages/gtk-2.0:/usr/lib/python2.7/dist-packages/ubuntu-sso-client $> IntentionalBadCommand Fatal Python error: Py_Initialize: Unable to get the locale encoding File "/usr/lib/python2.7/encodings/__init__.py", line 123 raise CodecRegistryError,\ ^ SyntaxError: invalid syntax Aborted 错误的是认为PYTHONPATH需要包含整个宇宙的所有需要​​。 是的,我在发布之前做了RTFM,但是我想我错过了开始词“Augment”的意义。 […]

为什么os.path.getsize()返回一个10GB文件的负数?

我正在使用函数os.path.getsize()给出文件的大小以字节为单位。 因为我的一个文件大小是10GB,它给我的负面(字节)大小。 所以任何人都可以告诉我为什么会发生这种情况? 这是我的代码: import os ospathsize = os.path.getsize('/home/user/Desktop/test1.nrg') print (ospathsize)

Python 2.7 Cx_Freeze:ImportError:没有名为__startup__的模块

我正在尝试使用cx_Freeze将Python中的hello世界程序编译成Linux上的独立二进制/程序包。 当cx_Freeze运行时,它完成没有错误,但是当我尝试运行生成的可执行文件时,我得到的错误: ImportError: No module named __startup__ 我的setup.py文件是: from cx_Freeze import setup, Executable # Dependencies are automatically detected, but it might need # fine tuning. buildOptions = dict(packages = [], excludes = []) base = 'Console' executables = [ Executable('test.py', base=base) ] setup(name='test', version = '1.0', description = '', options = dict(build_exe = buildOptions), executables […]

我如何申请当前stream程?

是否有可能使用sudo前端(如gksudo)来提升当前进程的权限? 我知道我可以做到以下几点: sudo cat /etc/passwd- 但我有兴趣这样做: sudo-become-root # magic function/command cat /etc/passwd- 我正在用Python编写。 我的用例是,我有一个程序作为用户运行,但可能会遇到文件读/写是根拥有的。 我想提示input密码,获得root权限,执行我所需要的操作,然后再select性地删除权限。 我知道我可以将pipe理逻辑和非pipe理逻辑分开到单独的进程中,然后以root身份运行pipe理进程(通过一些通信 – policykit / dbus在这里很合适)。 但是我希望有一个更简单的(尽pipe承认更危险)​​的解决scheme。 我想通过sudo运行Solaris的ppriv,然后修改当前进程的权限。 这似乎是一个hacky,但可行的往返。 但据我所知,linux不提供ppriv。 (我很惊讶这已经不是很明显了,这似乎是一个非常罕见的事情,似乎并不是一个安全漏洞,允许在新stream程升级的过程中升级。)

通过PIP安装与MKL的Scipy

我正在使用PIP与MKL一起安装Scipy以加速性能。 我的操作系统是Ubuntu 64位。 使用这个问题的解决scheme,我创build一个文件.numpy-site.cfg [mkl] library_dirs=/opt/intel/composer_xe_2013_sp1/mkl/lib/intel64/ include_dirs=/opt/intel/mkl/include/ mkl_libs=mkl_intel_lp64,mkl_intel_thread,mkl_core,mkl_rt lapack_libs= 这个文件帮助我成功安装了MKL。 但是,使用相同的上述文件,安装Scipy提示错误 ImportError: libmkl_rt.so: cannot open shared object file: No such file or directory 我也用 export LD_LIBRARY_PATH=/opt/intel/composer_xe_2013_sp1/mkl/lib/intel64 但问题仍然是一样的。 任何人都知道如何解决这个问题? 我不想手动安装Scipy,所以任何人给我一些提示,以解决它。

Python多处理内存使用情况

我写了一个程序,可以总结如下: def loadHugeData(): #load it return data def processHugeData(data, res_queue): for item in data: #process it res_queue.put(result) res_queue.put("END") def writeOutput(outFile, res_queue): with open(outFile, 'w') as f res=res_queue.get() while res!='END': f.write(res) res=res_queue.get() res_queue = multiprocessing.Queue() if __name__ == '__main__': data=loadHugeData() p = multiprocessing.Process(target=writeOutput, args=(outFile, res_queue)) p.start() processHugeData(data, res_queue) p.join() 真正的代码(特别是'writeOutput()')要复杂得多。 'writeOutput()'只使用这些值作为它的参数(意思是它没有引用ifata) 基本上它将一个巨大的数据集加载到内存中并对其进行处理。 输出的写入委托给一个subprocess(它实际上写入多个文件,这需要很多时间)。 所以每当一个数据项被处理时,它就会被发送到subprocess槽res_queue,然后根据需要将结果写入文件。 subprocess不需要以任何方式访问,读取或修改由'loadHugeData()'加载的数据。 subprocess只需要使用主进程通过“res_queue”发送的内容。 […]