Articles of python

IDLE不能导入Tkinter。 您的Python可能没有configuration为Tk

我正在运行Ubuntu 10.10,并且今天安装了Python 3.2。 系统已经在运行Python 2.6。 我在terminalinput了idle3.2,它给了我: IDLE不能导入Tkinter。 您的Python可能没有configuration为Tk。 所以我search堆栈溢出 (和在其他地方)的解决scheme,我安装了python-tk ,我重新检查,我有tclsh在系统上,但我仍然无法设法打开idle3.2 。 任何input将不胜感激。

列出当前打开的文件句柄?

可能重复: 检查在Python中打开了哪些文件 你好, 是否有可能获得所有当前打开的文件句柄的列表,我认为它们存储在环境中的某个地方。 我对theis函数感兴趣,因为我想要安全地处理在致命错误引发时打开的任何文件,即closures文件句柄并用原始文件replace可能损坏的文件。 我有处理工作,但不知道什么文件句柄打开,我无法实现这个想法。 顺便说一句,当一个文件句柄被初始化时,这可以被另一个导入的方法inheritance吗? 谢谢

无法找出-11的返回码是什么意思

我正在写一个工具,它是用python和C编写的.python脚本读取一个configuration文件,执行一些validation,使得对C程序进行几次调用。 系统:RHE 5.7,python:2.7.6,gcc:4.5.2 被调用的C程序的一些参数是input文件的path。 有一种情况下input文件path对于多个C程序调用是相同的。 在这种情况下,只有第一次调用成功,并且pythonsubprocess模块的返回码是'-11'。 我不知道如何进步。 首先,我无法find指示“-11”作为退出状态可能意味着什么的文档。 它似乎不在/usr/include/sysexits.h中的“标准”代码中。 我猜测,代码也可以解释为0xf5或245,因为退出代码是我相信真正签名的8位值。 我在C程序的开始处添加了debugging,以打印出被调用的参数,但没有任何内容显示失败的调用。 我可以理解C可能会重新打开一个在前面的调用(也许)上读取的文件失败,但代码甚至没有那么远! 那么,退出代码从哪里来? 是从pythonsubprocess模块推测C程序的(bash)环境出发的吗? 它是否从C程序的C运行时,甚至达到主要? 我想我可以通过将“循环”向下移动到C中来实现这一目标,以便每个input文件path只调用一次,但仍不能解释这种行为。 有人可以解释我如何才能确定这个错误的原因? 谢谢。 (FWIW)从python调用: try: subprocess.check_call( args ) except subprocess.CalledProcessError as e: print e 进入C: printf( "\n— swizzle\n\nargs:\n" ); for ( int i = 0; i < argc; i++ ) printf( "- %s\n", argv[ i ]); 错误输出: Command '[..]' returned […]

Python和FIFO

我试图了解在Linux下使用Python的FIFO,我发现了一个奇怪的行为,我不明白。 以下是fifoserver.py import sys import time def readline(f): s = f.readline() while s == "": time.sleep(0.0001) s = f.readline() return s while True: f = open(sys.argv[1], "r") x = float(readline(f)) g = open(sys.argv[2], "w") g.write(str(x**2) + "\n") g.close() f.close() sys.stdout.write("Processed " + repr(x) + "\n") 这是fifoclient.py import sys import time def readline(f): s = f.readline() […]

Python的ctypes不加载在Mac OS X的dynamic库

我有一个C ++库repeater.so ,我可以在Linux中从Python加载以下方式: import numpy as np repeater = np.ctypeslib.load_library('librepeater.so', '.') 但是,当我在Mac OS X(Snow Leopard,32位)上编译相同的库并获得repeater.dylib ,然后在Python中运行以下代码: import numpy as np repeater = np.ctypeslib.load_library('librepeater.dylib', '.') 我得到以下错误: OSError: dlopen(/mydir/librepeater.dylib, 6): no suitable image found. Did find: /mydir/librepeater.dylib: mach-o, but wrong architecture 在Mac OS X上,我是否需要做一些不同的工作才能在Python中加载dynamic库?

在linux中打开文件夹窗口的标准方法?

我想在跨平台(windows / mac / linux)的Python应用程序中,在相应的文件pipe理器中打开一个文件夹窗口。 在OSX上,我可以用finder打开一个窗口 os.system('open "%s"' % foldername) 并在Windows上 os.startfile(foldername) 那么unix / linux呢? 有没有一个标准的方法来做到这一点,或者我有特殊情况下gnome / kde / etc和手动运行适当的应用程序(鹦鹉螺/ konqueror /等)? 这看起来像freedesktop.org人们可以指定的东西(一个python模块,类似于webbrowser ,也会很好!)。

Python线程与Linux中的多处理

基于这个问题,我认为创build新进程应该和在Linux中创build新线程 一样快 。 但是,一点testing显示非常不同的结果。 这是我的代码: from multiprocessing import Process, Pool from threading import Thread times = 1000 def inc(a): b = 1 return a + b def processes(): for i in xrange(times): p = Process(target=inc, args=(i, )) p.start() p.join() def threads(): for i in xrange(times): t = Thread(target=inc, args=(i, )) t.start() t.join() testing: >>> timeit […]

有没有办法确定一个Linux的PID是否暂停?

我有一个python脚本使用SIGSTOP和.SIGCONT命令与os.kill来暂停或恢复一个进程。 有没有办法确定相关的PID是否处于暂停或恢复状态?

了解Python分叉和内存分配错误

我有一个内存密集型的Python应用程序(在几百MB到几GB之间)。 我有几个非常小的Linux可执行文件,主应用程序需要运行,例如 child = Popen("make html", cwd = r'../../docs', stdout = PIPE, shell = True) child.wait() 当我使用subprocess.Popen运行这些外部实用程序(一次,在长的主进程运行结束时)我有时会得到OSError: [Errno 12] Cannot allocate memory 。 我不明白为什么…请求的过程是微小的! 系统有足够的内存来存放更多的shell。 我使用Linux(Ubuntu 12.10,64位),所以我想subprocess调用Fork。 叉叉我现有的过程,从而加倍消耗的内存量,并失败?? 发生了什么“抄写”? 我可以在没有分叉的情况下产生一个新的进程(或者至less没有复制内存 – 从新开始)? 有关: fork(),vfork(),exec()和clone() fork()和内存分配行为 python subprocess.Popen错误与OSError:[Errno 12]一段时间后不能分配内存 Python的内存分配错误使用subprocess.Popen

我如何自动杀死一个Python使用太多内存的进程?

情况:我有一个网站,允许人们使用不同语言 (特别是我创build的esolang)执行任意代码, 在共享托pipe服务器上使用Python解释器。 我在一个单独的进程中运行这个代码,时间限制为60秒。 问题:你可以做一些像(Python等价物) 10**(10**10)这样的东西,它比我分配给我的内存消耗更多的内存。 它也显然locking了Apache – 或者响应时间太长 – 所以我必须重新启动它。 我已经看到这个问题 ,但给出的答案使用Perl,我根本不知道,因此我想在Python中的答案。 不过,操作系统也是 Linux。 具体来说,我想要以下特征: 自动运行 强制杀死任何超过内存限制(如1MB或100MB)的进程 杀死我的代码超过24小时的任何进程 我使用这段代码(在Django视图中)来创build进程并运行它( proxy_prgm是一个Manager,所以我可以从解释esolang代码的程序中检索数据): prgmT[uid] = multiprocessing.Process( target = proxy_prgm.runCatch, args = (steps,), name="program run") prgmT[uid].start() prgmT[uid].join(60) #time limit of 1 minute if prgmT[uid].is_alive(): prgmT[uid].terminate() proxy_prgm.stop() 如果你需要更多的细节,不要犹豫,告诉我要编辑什么(或者问我问题)。