Articles of python

在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() 如果你需要更多的细节,不要犹豫,告诉我要编辑什么(或者问我问题)。

Python套接字库认为套接字是不是打开

我正在处理一些Python,看起来像这样: HOST = '127.0.0.1' PORT = 43434 single = socket.socket(socket.AF_INET, socket.SOCK_STREAM) try: single.bind((HOST, PORT)) except socket.error as e: # Print an error, exit. 虽然过去运行良好,但是现在我们已经得到错误[Errno 98] Address already in use 。 SIGINT处理程序closures套接字连接,所以我不确定它是如何得到这种状态,但现在我只是想解决它。 lsof和netstat都说没有使用该端口: [$]> sudo netstat -an | grep 43434 [$]> sudo lsof -i :43434 根据/proc/sys/net/ipv4/tcp_fin_timeout , TIME_WAIT被设置为60秒,但是在最后一次运行成功之后甚至几个小时都会发生错误。 我试过(暂时)设置REUSEADDR (通过single.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) ),但似乎没有任何效果。 什么在tarnation是怎么回事? 我能够再次使用这个端口而不必重新启动机器吗?

python Pipes的同步/asynchronous行为

在我的应用程序中,我使用多处理模块中的pipe道在python进程之间进行通信。 最近我观察到一个奇怪的行为取决于我通过他们发送的数据的大小。 根据python文档,这些pipe道是基于连接的,并且应该以asynchronous的方式运行,但是有时他们在发送时会卡住。 如果我在每个连接中启用全双工,一切工作正常,即使我没有使用连接发送和收听。 任何人都可以解释此行为? 100浮点数,全双工禁用 代码工作,利用asynchronous。 100个浮点,全双工启用 该示例正常工作正常。 10000浮点数,全双工禁用 尽pipe数据较小,但执行被永久封锁。 10000浮点,全双工启用 再次罚款。 代码(这不是我的生产代码,它只是说明了我的意思): from collections import deque from multiprocessing import Process, Pipe from numpy.random import randn from os import getpid PROC_NR = 4 DATA_POINTS = 100 # DATA_POINTS = 10000 def arg_passer(pipe_in, pipe_out, list_): my_pid = getpid() print "{}: Before send".format(my_pid) pipe_out.send(list_) print "{}: […]

Python – 使用/ SSH使用远程主机的envvariables

任何有关这个问题的帮助将不胜感激。 基本上我正在写一个Python脚本,将ssh到各种服务器上,并执行脚本。 问题是这些脚本使用一个envvariables来启动。 即脚本是test.sh,但我们使用一个envvariables来启动它,运行test.sh. 到目前为止,我采取的路线,如Paramiko模块执行命令,但实际上并没有采取envvariables。 import paramiko ssh = paramiko.SSHClient() ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) ssh.connect('testserver' ) stdin, stdout, stderr = ssh.exec_command(cd /home/test/;$run ./test.sh') print stdout.readlines() print stderr.readlines() ssh.close() 有没有办法使用paramiko? 或者我应该采取另一种方式? 谢谢 @罗布 我编辑脚本来testing。 $ runvariables回来了。 stdin, stdout, stderr = ssh.exec_command('whoami;echo hello; echo $run ; echo goodbye') ['testuser\n', 'hello\n', '\n', 'goodbye\n'] [] @罗布部分2 login到服务器,我可以echo $ run,并返回正确的path/脚本我也检查,这是一个ENVvariables设置在.profile。 我觉得像python不调用.profile。

你如何更新到最新的python 3.5.1版本的覆盆子pi?

我昨天得到了我的树莓派,我已经试着用它编码了。 我有一个计划,我打算运行它,但它只与Python版本3.5.0或3.5.1兼容,我发现在互联网上的一切似乎是过时的,与Python 2做或不相关到我的问题,因为我还没有看到任何其他的100%需要Python 3.5,可以应付3.4(目前预安装)。 .exe文件在Linux上不起作用。 我是Raspberry Pi和Linux的新手,因为我一直是Windows用户。 任何帮助表示赞赏。 非常感谢 – 罗伯特

分配独立的libpythonpath

在较新的Ubuntu / Debian版本下, libpython2.7.so位于/usr/lib/i386-linux-gnu/libpython2.7.so或/usr/lib/x86_64-linux-gnu/libpython2.7.so之下早些时候,无论架构如何,都可以在/usr/lib/libpython2.7.sofind它们。 我没有检查其他分布。 如何findPython的libpython2.7.so的path?