Articles of python

Python shutil.copy在FAT文件系统上失败(Ubuntu)

问题:在Linux中使用shutil.copy()将文件复制到FAT16挂载的文件系统失败(Python 2.7.x)。 失败是shutil内部错误和实际上失败shutil.chmod,shutil.copy似乎执行。 Shell chmod也会失败,因为在FAT中不支持权限。 问题:有没有什么干净的方法呢? 我知道我有几个select,例如: 使用复制文件 – 不理想,因为它需要完整的path,而不仅仅是目标目录,但可行 执行shell cp来复制文件 编写自己的复制function,不要尝试更改文件模式 有没有办法解决这个在Python或FAT挂载选项? 我现在通过执行mount -t vfat -o umask = 000 / dev / loop0 / mnt / foo来挂载我的程序中的文件系统 捕获exception并没有什么帮助,因为在shutil.copy和shutil.copy()内发生exception时,它在从IOException发送到调用函数之前似乎从shutil.chmod()捕获IOExceptionexception时删除目标文件。 任何想法,或者我应该从1-3select一个? 汉努

我如何检测Ubuntu版本?

我目前正在编写一个改变一些networkingconfiguration文件的Python应用程序。 该应用程序需要在Ubuntu 10.04至13.10上运行。 问题是,NetworkManager在不同的版本中有不同的方式(尽pipe它们最终在13.04+版本中修复了这个问题)被破坏了,这会导致与我的应用程序不兼容。 我已经找出了每个版本的问题,并为他们开发了解决方法,我只是不确定最好的方法是检测用户正在运行的Ubuntu版本。 到目前为止我所提出的最好的解决scheme是parsinglsb_release -a的输出,但是这似乎是一个相当脆弱的解决scheme,可能会失败,例如Mint等Ubuntu派生的发行版本,甚至可能会出现一些“官方“变体(Kubuntu,Xubuntu等)。 有没有一种很好的方法来检测给定的Linux发行版的基本分布和版本,所以我可以基于我的应用程序在该版本上做出的select?

在Python中将RAR文件的内容读入内存

我正在寻找一种方法来读取从rar档案到内存的特定文件。 具体来说,他们是编号图像文件的集合(我正在写一个漫画阅读器)。 虽然我可以简单地unrar这些文件,并根据需要加载(完成时删除它们),如果可能,我宁愿避免这种情况。 所有人都说,如果可能的话,我更喜欢跨平台(Windows / Linux)的解决scheme,但Linux是必须的。 同样重要的是,如果您要指出一个图书馆来处理这个问题,请理解它必须是免费的(如啤酒)或OSS。

为什么subprocess.Popen参数长度限制小于操作系统报告的限制?

我在Linux 3.16.0上运行Python 3.4.3。 我想使用subprocess.Popen来运行一个长单参数(一个复杂的Bash调用),大约200KiB的命令。 根据getconf和xargs ,这应该是在我的范围内: $ getconf ARG_MAX 2097152 $ xargs –show-limits < /dev/null Your environment variables take up 3364 bytes POSIX upper limit on argument length (this system): 2091740 POSIX smallest allowable upper limit on argument length (all systems): 4096 Maximum length of command we could actually use: 2088376 Size of command buffer […]

是否有可能在python shebang中包含命令行选项?

我在我的python脚本的顶部有规范的shebang。 #!/usr/bin/env python 但是,当我运行我的脚本时,我仍然经常想要将无缓冲的输出导出到日志文件中,所以我最终调用了: $ python -u myscript.py &> myscript.out & 我可以embedded-u选项在shebang中像这样… #!/usr/bin/env python -u 只打电话: $ ./myscript.py &> myscript.out & …仍然没有得到缓解? 我怀疑这是行不通的,想在尝试之前检查一下。 有什么可以做到这一点?

如何防止Python的os.walk跨越挂载点?

在Unix中,所有的磁盘都是作为主文件系统中的path公开的,因此os.walk('/')将遍历,例如/media/cdrom以及主硬盘,这对于某些应用程序来说是不可取的。 如何获得保持在单个设备上的os.walk ? 有关: 有没有一种方法来确定一个子目录是否在使用os.walk的python在同一个文件系统?

在Linux中工作时模拟Ctrl-C键盘中断

我正在处理一些脚本(在我工作的公司),这些脚本被加载/卸载到虚拟机pipe理程序中,以便在事件发生时触发一段代码。 实际卸载脚本的唯一方法是按Ctrl – C。 我正在用Python编写一个自动化过程的函数 只要在程序的输出中看到string"done" ,就应该vprobe 。 我正在使用subprocess.Popen执行命令: lineList = buff.readlines() cmd = "vprobe /vprobe/myhello.emt" p = subprocess.Popen(args = cmd, shell=True,stdout = buff, universal_newlines = True,preexec_fn=os.setsid) while not re.search("done",lineList[-1]): print "waiting" os.kill(p.pid,signal.CTRL_C_EVENT) 正如您所看到的,我正在以读写模式打开的buff文件描述符中输出。 我检查最后一行; 如果它已经'done' ,我就杀了它。 不幸的是, CTRL_C_EVENT只对Windows有效。 我能为Linux做什么?

“以下软件包将被更高优先级的频道取代”是什么意思?

免责声明:我是一个无知的Linux + Anaconda noob。 现在,就这样,我正试图在64位Linux上安装我的Anaconda发行版中的fuzzywuzzy。 当我这样做,它试图改变我的conda , conda-env conda-forge渠道。 如下: 我通过写作搜寻anaconda模糊的wuzzy: anaconda search -t fuzzywuzzy 这表明在conda-forge上提供的64位Linux上的anaconda的最新版本是0.13。 要在命令行中安装,请input: conda install -c conda-forge fuzzywuzzy=0.13.0 我得到以下输出: The following packages will be downloaded: package | build —————————|—————– conda-env-2.6.0 | 0 1017 B conda-forge python-levenshtein-0.12.0 | py27_0 138 KB conda-forge conda-4.2.13 | py27_0 375 KB conda-forge fuzzywuzzy-0.11.0 | py27_0 15 […]

为什么孩子没有死?

我期望terminate()方法杀死这两个进程: import multiprocessing import time def foo(): while True: time.sleep(1) def bar(): while True: time.sleep(1) if __name__ == '__main__': while True: p_foo = multiprocessing.Process(target=foo, name='foo') p_bar = multiprocessing.Process(target=bar, name='bar') p_foo.start() p_bar.start() time.sleep(1) p_foo.terminate() p_bar.terminate() print p_foo print p_bar 运行代码给出: <Process(foo, started)> <Process(bar, started)> <Process(foo, started)> <Process(bar, started)> … 我期待着: <Process(foo, stopped)> <Process(bar, stopped)> <Process(foo, stopped)> […]

使用Python 3.6.1在Linux / Intel Xeon上使用“fork”上下文块进行多处理?

问题描述 我稍微调整了这个答案的代码(见下文)。 但是,当在Linux上运行这个脚本(如命令行: python script_name.py )时,它将打印所有jobs running: x ,但之后似乎卡住了。 但是,当我使用spawn方法( mp.set_start_method('spawn') )它工作得很好,立即开始打印countervariables的值(请参阅listener方法)。 题 为什么它只在产卵过程中起作用? 我怎样才能调整代码,所以它与Forc的工作(因为它可能更快) 码 import io import csv import multiprocessing as mp NEWLINE = '\n' def file_searcher(file_path): parsed_file = csv.DictReader(io.open(file_path, 'r', encoding='utf-8'), delimiter='\t') manager = mp.Manager() q = manager.Queue() pool = mp.Pool(mp.cpu_count()) # put listener to work first watcher = pool.apply_async(listener, (q,)) jobs […]