小编Per*_*nce的帖子

使用PyYaml为YAML添加注释

我正在使用PyYaml从我自己的python对象创建Yaml文档.例如我的对象:

class MyObj(object):
    name = "boby"
    age = 34
Run Code Online (Sandbox Code Playgroud)

变为:

boby:
   age: 34
Run Code Online (Sandbox Code Playgroud)

到现在为止还挺好.

但我还没有找到一种方法以编程方式向生成的yaml添加注释,因此它看起来像:

boby:       # this is the name
   age: 34  # in years
Run Code Online (Sandbox Code Playgroud)

看看PyYaml文档以及代码,我发现没办法这样做.

有什么建议?

python yaml pyyaml

16
推荐指数
1
解决办法
3043
查看次数

使用python为文件设置执行位

在Mac OS上使用python,我想打开一个文件进行编写并将一些shell命令放入其中.后来要在终端运行.

with open("my_script.sh", "w") as fd:
    fd.write("#!/bin/sh\n")
    fd.write("echo $PATH\n")
Run Code Online (Sandbox Code Playgroud)

这将创建文件,但我无法想象如何设置执行位,所以当我在终端中运行它时我不会得到:

sh: my_script.sh: Permission denied
Run Code Online (Sandbox Code Playgroud)

python macos file-io

14
推荐指数
2
解决办法
7280
查看次数

Mac OSX捆绑包的图标

我编译了一个名为MyBundle.bundle的Mac OSX软件包,它用作另一个应用程序的插件.我希望捆绑包有一个独特的图标,所以我设置Info.plist文件说:

<key>CFBundleIconFile</key>
<string>MyIcon.icns</string>
Run Code Online (Sandbox Code Playgroud)

并将文件MyIcon.icns放在bundle的MyBundle.bundle/Contents/Resources文件夹中.

这不起作用,查找程序显示捆绑包的通用图标并忽略指定的MyIcon.icns文件.如果我将软件包的扩展名从.bundle更改为.app,则图标会立即显示 - 所以我知道Info.plist是正确的.

我找到了一个可以模拟用户在包上复制和粘贴图标的工作:

我将图标作为"icns"类型的资源和id -16455添加到bundle的.rsrc文件中.

我打电话

/Developer/Tools/SetFile -a BC MyBundle.bundle
Run Code Online (Sandbox Code Playgroud)

这有效,但真的很蹩脚.从Mac OS 10.8开始,SetFile需要永远执行.

我的问题:是否有强迫Finder在没有这些黑客的情况下显示捆绑的图标?

BTW:关于同一主题有一个问题:设置非app mac os x bundle的图标 ; 但唯一的答案是指示如何创建一个图标,并没有帮助解决问题.

macos icons finder bundle

13
推荐指数
2
解决办法
3521
查看次数

boost :: program_options:如何指定没有" - "或" - "的命令

我正在使用boost :: program_options来实现具有以下语法的命令行实用程序:

myutil command [--in file_name] [---out file_name]
Run Code Online (Sandbox Code Playgroud)

其中'command'是必需的,并且是以下之一:

read | write | find | version | help
Run Code Online (Sandbox Code Playgroud)

问题是"命令"不应该要求--或者-我还没有找到如何使用boost :: program_options来做到这一点.

c++ boost boost-program-options

10
推荐指数
1
解决办法
2936
查看次数

使用URLForDirectory而不是FSFindFolder定位Mac OS X文件夹

我有一些旧代码使用旧的FSFindFolder例程查找特定文件夹.现在我的任务是使代码现代化.起初使用NSFileManagerURLForDirectory似乎是正确的选择.不幸的是,我发现了很多,你可以找到使用文件夹的FSFindFolder不再受支持URLForDirectory.

您可以使用FSFindFolder找到的文件夹列表很长,而且大多数文件夹对我来说都没用.

以下是我需要转换的FSFindFolder常量的部分列表及其URLForDirectory等价物:

FSFindFolder                    URLForDirectory
==============================  ===============
kDesktopFolderType              NSDesktopDirectory
kCachedDataFolderType           NSCachesDirectory
kApplicationSupportFolderType   NSApplicationSupportDirectory
kTemporaryFolderType            located by calling NSTemporaryDirectory()
kCurrentUserFolderType          located by calling NSHomeDirectory()
kSystemFolderType               Not Available
kPreferencesFolderType          Not Available
kTrashFolderType                Not Available
kAudioComponentsFolderType      Not Available
kVolumeRootFolderType           Not Available
kSharedUserDataFolderTypeNo     Not Available
Run Code Online (Sandbox Code Playgroud)

我的问题:有没有一种标准方法可以在不使用FSFindFolder的情况下找到标记为"不可用"的每个文件夹的路径?

macos cocoa macos-carbon nsfilemanager

7
推荐指数
1
解决办法
3361
查看次数

asyncio.iscoroutinefunction 对于异步生成器返回 False

以下异步生成器代码直接取自 PEP525:

async def gen():
    await asyncio.sleep(0.1)
    v = yield 42
    print(v)
    await asyncio.sleep(0.2)
Run Code Online (Sandbox Code Playgroud)

但是,当我调用(使用 python3.6)时:

print(asyncio.iscoroutinefunction(gen), asyncio.iscoroutine(gen))
Run Code Online (Sandbox Code Playgroud)

我得到:

False, False
Run Code Online (Sandbox Code Playgroud)

为什么异步生成器无法识别为协程函数?

还有其他方法可以将其识别为协程函数吗?

python python-3.x python-asyncio python-3.6

7
推荐指数
1
解决办法
3038
查看次数

在Mac OSX上构建所有静态svn客户端,mod_dav_svn.so上的错误

我正在尝试在Mac OS 10.7.5上构建svn客户端.我的目标是构建完全静态的svn客户端,因此它不依赖于任何安装的dylib.我们的想法是可以将svn客户端复制到密钥上的磁盘上,或者下载它,无需安装或配置任何东西即可运行.

我下载了svn源代码(subversion-1.7.8)和所有必需的依赖项(apr,par-util,neon,sqlite-amalgamation),并说明了configure-make-make安装周期.

Svn的configure选项具有--enable-all-static标志,用于创建不依赖于外部dylib的svn客户端.但是,构建始终失败并显示以下消息:

Warning!  dlname not found in /Volumes/mydisk/build/svn/libexec/mod_dav_svn.la.
Assuming installing a .so rather than a libtool archive.
chmod 755 /Volumes/mydisk/build/svn/libexec/mod_dav_svn.so
chmod: /Volumes/mydisk/wsvn/build/svn/libexec/mod_dav_svn.so: No such file or directory
apxs:Error: Command failed with rc=65536
.
make: *** [install-mods-shared] Error 1
Run Code Online (Sandbox Code Playgroud)

似乎构建正在寻找mod_dav_svn.so,即使它不需要并且一切都编译为静态.

有趣的是,构建的svn客户端实际运行!但是,我想正确完成构建和安装.

我的问题是:

  1. 这个构建错误是真实的还是我可以忽略的东西?
  2. 如何完成构建,我该如何避免此构建错误?

谢谢

svn macos configure mod-dav-svn

6
推荐指数
1
解决办法
1506
查看次数

SQLAlchemy 事件不起作用

我正在使用 SQLAlchemy 并尝试将事件添加到我的代码中。虽然一切正常,但不会触发事件。这是我的简化代码:

from sqlalchemy import Column, String
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker
from sqlalchemy import event

alchemy_base = declarative_base()

class Person(alchemy_base):
    __tablename__ = 'my_table'
    name = Column(String, primary_key=True)

@event.listens_for(Person, "before_insert")
def before_insert(mapper, connection, instance):
    print("before_insert", mapper, connection, instance)

engine = create_engine('sqlite:///:memory:', echo=True)
alchemy_base.metadata.create_all(engine)
session_maker = sessionmaker(bind=engine)
session = session_maker()

insert_dicts = [{'name': "ami"}, {'name': "beni"}]
engine.execute(Person.__table__.insert(), insert_dicts)
session.commit()
Run Code Online (Sandbox Code Playgroud)

before_insert尽管值已输入到 DB 中,但并未调用该函数。

我在 Mac OS 上使用 python 2.7.10,SQLAlchemy 1.0.10。

python sqlalchemy python-2.7

6
推荐指数
1
解决办法
1920
查看次数

使用以管理员身份运行创建 Windows 资源管理器快捷方式

我正在使用 win32com.client 在 Windows 上创建快捷方式:

from win32com.client import Dispatch

shell = Dispatch("WScript.Shell")
shortcut = shell.CreateShortCut(shortcut_path) # shortcut_path defined elsewhere
shortcut.Targetpath = target_path
shortcut.WorkingDirectory = working_directory # working_directory defined elsewhere
shortcut.save()
Run Code Online (Sandbox Code Playgroud)

我希望使用“以管理员身份运行”复选框创建快捷方式:

带有“以管理员身份运行”复选框的快捷方式

是否可以使用 python 和 win32com 来做到这一点?

我在 Windows 7 64 位上使用 python 3.5。

python windows shortcut win32com

6
推荐指数
1
解决办法
798
查看次数

如何在带有 Retina 显示屏的 Mac OS 上的 OpenGL 中绘制文本

我正在使用 OpenGL 在 Mac OS 中绘图。当我的代码在 Retina 显示器上运行时,除文本绘制外,一切正常。在视网膜显示下,文本是应有的两倍大。发生这种情况是因为字体大小以磅为单位,每个点在 Retina 下为 2 个像素,但 OpenGL 是基于像素的。

下面是标准显示下正确的文字绘制:
标准显示下正确的文字绘制

这是 Retina 显示下错误的文本绘制:
Retina 显示下不正确的文本绘制

这是我通常绘制字符串的方式。由于 OpenGL 没有文本绘制功能,为了绘制文本,我执行以下操作:

  1. 获取字体:

    NSFontManager fontManager = [NSFontManager sharedFontManager];
    NSString
    font_name = [NSString stringWithCString: "Helvetica" encoding: NSMacOSRomanStringEncoding];
    font = [fontManager fontWithFamily: font_name traits:fontStyle weight:5 size:9];
    attribs = [[NSMutableDictionary dictionaryWithCapacity: 3] 保留];
    [属性 setObject:font forKey:NSFontAttributeName];

  2. 创建并测量字符串:

    NSString* aString = [NSString stringWithCString: "blah blah" encoding: NSMacOSRomanStringEncoding];
    NSSize frameSize = [aString sizeWithAttributes: m_attribs];

  3. 分配 NSImage 的大小:

    NSImage* image = [[NSImage alloc] initWithSize:frameSize];
    [图像锁定焦点];

  4. 将字符串绘制到图像中:

    [aString …

opengl macos fonts nsstring retina-display

5
推荐指数
1
解决办法
3654
查看次数