Python有一个标准的库模块ftplib来运行FTP通信.它有两种获取目录内容列表的方法.一,FTP.nlst()将返回给定目录名作为参数的目录内容列表.(如果给定文件名,它将返回文件的名称.)这是一种列出目录内容的可靠方法,但不会指示列表中的每个项目是文件还是目录.另一种方法是FTP.dir(),它给出了作为参数给出的目录的目录内容的字符串格式列表(或给定文件名的文件属性).
根据之前关于Stack Overflow的问题,解析结果dir()可能很脆弱(不同的服务器可能会返回不同的字符串).我正在寻找一些方法来列出通过FTP在另一个目录中包含的目录.据我所知,d在字符串的权限部分中抓取一个是我提出的唯一解决方案,但我想我无法保证权限将出现在不同服务器之间的同一位置.是否有更强大的解决方案来识别FTP上的目录?
我想SLIDE_NUMBER / TOTAL_SLIDES从Beamer演示文稿的页脚(footline)中删除幻灯片计数(例如),而不是完全删除页脚.我正在使用Boadilla主题,它使用infolines外部主题.在beamerouterthemeinfolines.sty文件中,我们找到了以下脚线的定义:
\defbeamertemplate*{footline}{infolines theme}
{
\leavevmode%
\hbox{%
\begin{beamercolorbox}[wd=.333333\paperwidth,ht=2.25ex,dp=1ex,center]{author in head/foot}%
\usebeamerfont{author in head/foot}\insertshortauthor~~(\insertshortinstitute)
\end{beamercolorbox}%
\begin{beamercolorbox}[wd=.333333\paperwidth,ht=2.25ex,dp=1ex,center]{title in head/foot}%
\usebeamerfont{title in head/foot}\insertshorttitle
\end{beamercolorbox}%
\begin{beamercolorbox}[wd=.333333\paperwidth,ht=2.25ex,dp=1ex,right]{date in head/foot}%
\usebeamerfont{date in head/foot}\insertshortdate{}\hspace*{2em}
\insertframenumber{} / \inserttotalframenumber\hspace*{2ex}
\end{beamercolorbox}}%
\vskip0pt%
}
Run Code Online (Sandbox Code Playgroud)
我需要基本上重新定义这个外部主题,使其没有内部主题\insertframenumber{} / \inserttotalframenumber\hspace*{2ex},或者以其他方式定义一个新的外部主题,继承infolines主题中的所有其他主题.我怎样才能做到这一点?
我一直在靠墙试图用matplotlib和python和wxpython更新图形.我想按一个按钮并将数据添加到嵌套在wx.notebook中的图形.下面是代码.
谢谢您的帮助
import wx
import matplotlib as mpl
import matplotlib.pyplot as plt
from matplotlib.backends.backend_wxagg import FigureCanvasWxAgg as Canvas
class Plot(wx.Panel):
def __init__(self, parent, id = -1, dpi = None, **kwargs):
wx.Panel.__init__(self, parent, id=id, **kwargs)
self.figure = mpl.figure.Figure(dpi=dpi, figsize=(2,2))
self.canvas = Canvas(self, -1, self.figure)
sizer = wx.BoxSizer(wx.VERTICAL)
sizer.Add(self.canvas,1,wx.EXPAND)
self.SetSizer(sizer)
class JBC(wx.Frame):
def __init__(self, parent, id, title):
wx.Frame.__init__(self, parent, id, title, size=(600,600))
self.SetBackgroundColour(wx.Colour(236, 233, 216))
self.nbG = wx.Notebook(self, -1, style=0, size=(400,400), pos=(0,0))
self.gSheet1 = self.add("Test").gca()
calcButton = wx.Button(self, wx.NewId(), "Update", pos=(0, self.nbG.Position.y+400)) …Run Code Online (Sandbox Code Playgroud) 我正在尝试子类化pysam的Tabixfile类并在实例化时添加其他属性.
class MyTabixfile(pysam.Tabixfile):
def __init__(self, filename, mode='r', *args, **kwargs):
super().__init__(filename, mode=mode, *args, **kwargs)
self.x = 'foo'
Run Code Online (Sandbox Code Playgroud)
当我尝试实例化我的MyTabixfile子类时,我得到一个TypeError: object.__init__() takes no parameters:
>>> mt = MyTabixfile('actn2-oligos-forward.tsv.gz')
Traceback (most recent call last):
File "<ipython-input-11-553015ac7d43>", line 1, in <module>
mt = MyTabixfile('actn2-oligos-forward.tsv.gz')
File "mytabix.py", line 4, in __init__
super().__init__(filename, mode=mode, *args, **kwargs)
TypeError: object.__init__() takes no parameters
Run Code Online (Sandbox Code Playgroud)
我也尝试Tabixfile显式调用构造函数:
class MyTabixfile(pysam.Tabixfile):
def __init__(self, filename, mode='r', *args, **kwargs):
pysam.Tabixfile.__init__(self, filename, mode=mode, *args, **kwargs)
self.x = 'foo' …Run Code Online (Sandbox Code Playgroud) 我有一个我正在开发的Django应用程序,它必须对服务器上的外部程序进行系统调用.在为系统调用创建命令时,应用程序从表单中获取值并将其用作调用的参数.我想这意味着一个人基本上可以使用伪参数并为shell执行任意命令来执行(例如,只需放置一个分号然后rm -rf *).
这是不好的.虽然大多数用户不是恶意的,但这是一个潜在的安全问题.如何处理这些潜在的利用点?
编辑(澄清):用户将看到一个表格,其中包含每个参数和选项的各种字段.但是,某些字段将作为打开文本字段提供.所有这些字段都合并并送入subprocess.check_call().但从技术上讲,这并不仅仅是将用户的命令提示交给用户.这必须相当普遍,所以其他开发人员如何清理输入以便他们不会得到Bobby Tables.
在我大胆地提交错误报告之前,我想我会在这里用更聪明的Pythonistas检查我的假设.我今天遇到了一个令人困惑的案例,所以我把它改成了一个玩具示例,如下所示:
#!/usr/bin/env python
# -*- coding: UTF-8 -*-
"""
A little script to demonstrate that a function won't re-initialize its
list parameters between calls, but instead allows them to retain state.
"""
def bleedscope(a=[], b=[]):
"""
On each call, unless explicitly passed, both `a` and `b` should be
initialized as empty lists.
"""
c = a
if b:
c.extend(b)
return len(c)
x = bleedscope(b=[1])
print x # Should be 1, as expected.
x = bleedscope(b=[2])
print x # Expect also …Run Code Online (Sandbox Code Playgroud) 我们研究小组的一部分程序具有ctemplate库提供的辅助功能.在我们过时的集群中,我们无法通过编译来构建软件,因此我想将此功能分开并通过configure标志来控制它是否包含在内,例如--disable-ctemplate.
这个用C++编写的软件使用的是Autotools构建系统 - 我都没有这方面的经验.我的理解是,要完成这项任务,我需要做以下事情:
通过在中创建新AC_ARG_ENABLE条目,在configure脚本中添加新标志configure.ac.
在使用该库的代码周围添加一些#ifdef(或可能#ifndef)语句ctemplate,并围绕调用该代码的任何代码.
我认为第一步看起来像这样:
AC_ARG_ENABLE(ctemplate,
[ --disable-ctemplate Disable HTML output],
[case "${enableval}" in
yes) ctemplate=false ;;
no) ctemplate=true ;;
*) AC_MSG_ERROR(bad value ${enableval} for --disable-ctemplate) ;;
esac],[ctemplate=true])
AM_CONDITIONAL(NOCTEMPLATE, test x$ctemplate = xfalse)
Run Code Online (Sandbox Code Playgroud)
虽然我不知道逻辑是否正确,因为我已经从使用的示例改编了这个例子--enable-FLAG而不是--disable-FLAG.
对于第二步,我将在预处理器标志中包含部分,例如
#ifndef NOCTEMPLATE
void Class::MethodUsingCtemplate(...)
{
...
}
#endif
Run Code Online (Sandbox Code Playgroud)
如果我这样做,这会正确"连接"所有内容configure --disable-ctemplate吗?
另外,这是否会确保程序不会进入ctemplate库进行编译?如果没有,那么所有这一切都是徒劳的; 我必须阻止编译ctemplate库和依赖组件.
我会重复一遍,我不熟悉C++和Autotools; 我已经采取了一种非常天真的第一种方法来解决这个问题.如果您有这方面的经验,我将非常感谢您的更正和您可以提供的任何解释.
我正在尝试\\n使用pyparsing解析可以使用反斜杠 - 换行符组合(" ")在多行中分解的单词.这就是我所做的:
from pyparsing import *
continued_ending = Literal('\\') + lineEnd
word = Word(alphas)
split_word = word + Suppress(continued_ending)
multi_line_word = Forward()
multi_line_word << (word | (split_word + multi_line_word))
print multi_line_word.parseString(
'''super\\
cali\\
fragi\\
listic''')
Run Code Online (Sandbox Code Playgroud)
我得到的输出是['super'],而预期的输出是['super', 'cali', fragi', 'listic'].更好的是他们所有人都加入了一个词(我想我可以这样做)multi_line_word.parseAction(lambda t: ''.join(t)).
我尝试在pyparsing helper中查看此代码,但它给了我一个错误,maximum recursion depth exceeded.
编辑2009-11-15:后来我意识到pyparsing在空白方面有点慷慨,这导致一些不好的假设,我认为我正在解析的是松散的.也就是说,我们希望在单词的任何部分,转义和EOL字符之间看不到空格.
我意识到上面的小例子字符串不足以作为测试用例,所以我编写了以下单元测试.通过这些测试的代码应该能够匹配我直观地认为是一个逃避分裂词 - 而且只是一个逃避分裂词.它们不匹配不是转义拆分的基本单词.我们可以 - 我相信应该 - 使用不同的语法结构.这使两者分开保持整洁.
import unittest
import pyparsing
# …Run Code Online (Sandbox Code Playgroud) 我需要包装一个现有的C++库以便在Python中使用.在阅读了关于选择适当的方法来包装C++以便在Python中使用的答案之后,我决定使用Py ++.
我使用教程文件浏览了Py ++教程,我得到了预期的输出generated.cpp,但是我还没想出要做什么才能真正使用生成的代码作为我可以在Python中导入的扩展.我确定我现在必须编译代码,但是用什么?我应该使用bjam吗?
抽象基类在Python中仍然可以派上用场.在编写一个抽象基类,我希望每个子类都有一个spam()方法,我想写这样的东西:
class Abstract(object):
def spam(self):
raise NotImplementedError
Run Code Online (Sandbox Code Playgroud)
挑战还包括想要使用super(),并通过将其包含在整个子类链中来正确地完成.在这种情况下,似乎我必须super包括如下所示的每个调用:
class Useful(Abstract):
def spam(self):
try:
super(Useful, self).spam()
except NotImplementedError, e:
pass
print("It's okay.")
Run Code Online (Sandbox Code Playgroud)
这对于一个简单的子类来说没问题,但是当编写一个有很多方法的类时,try-except会变得有点麻烦,而且有点难看.是否有更优雅的抽象基类子类化方法?我只是做错吗?