小编Fak*_*ame的帖子

检查路径在Python中是否有效,而不在路径的目标上创建文件

我有一个路径(包括目录和文件名).
我需要测试文件名是否有效,例如,如果文件系统允许我创建具有这样名称的文件.
文件名中包含一些unicode字符.

可以安全地假设路径的目录段是有效且可访问的(我试图使问题更加适用,显然我太过分了).

除非必须,否则我非常不想逃避任何事情.

我发布了一些我正在处理的示例字符,但显然它们会被堆栈交换系统自动删除.无论如何,我想保留标准的unicode实体ö,并且只保留文件名中无效的东西.


这是捕获.可能(或可能不)已经是路径目标的文件.我需要保留该文件(如果它存在),如果不存在则不创建文件.

基本上我想检查是否可以写入路径而不实际打开写入路径(以及通常需要的自动文件创建/文件clobbering).

因此:

try:
    open(filename, 'w')
except OSError:
    # handle error here
Run Code Online (Sandbox Code Playgroud)

从这里

是不可接受的,因为它会覆盖我不想触摸的现有文件(如果它在那里),或者如果不存在则创建所述文件.

我知道我能做到:

if not os.access(filePath, os.W_OK):
    try:
        open(filePath, 'w').close()
        os.unlink(filePath)
    except OSError:
        # handle error here
Run Code Online (Sandbox Code Playgroud)

但那会创建文件filePath,然后我必须这样做os.unlink.

最后,似乎花了6或7行来做一些应该简单os.isvalidpath(filePath)或类似的事情.


顺便说一下,我需要在(至少)Windows和MacOS上运行,所以我想避免特定于平台的东西.

``

python filesystems filepath

74
推荐指数
6
解决办法
7万
查看次数

指定要为哪个python版本的pylint进行评估

我正在使用Sublime Text 3 With Pylinter来运行pylint我的文件.

但是,在同一台机器上,我处理python 2和python 3项目的文件(代码在几个远程测试VM中的一个上通过SSH执行.我通过在SMB上打开它来修改文件.是我的家庭测试实验室,我终于坐下来学习py3k了.

我可以轻松地覆盖pylint用于确定它应该lint的python版本的机制吗?理想情况下,会有一个内联指令,但我找不到任何好运.

我在Windows上(编辑)(远程虚拟机是linux,但这里不相关),这是值得的.

python pylint python-3.x

19
推荐指数
3
解决办法
9757
查看次数

在OS X中对HID设备的原始访问

在OS X上获取HID设备原始访问权限的最简单方法是什么?

我一直在查看IOKit示例,但即使打开一个设备似乎也是不必要的复杂,涉及多个回调并包含来自六个库的东西.
libusb可用于OS X,但是内核会抓取所有HID设备以进行独占访问,并且在尝试使用无代码.kext阻止它与我的设备关联时,我一直遇到奇怪的行为(它阻止内核抓取设备最初,但任何配置设备的调用似乎都会导致内核从我正在测试的小python libusb脚本中获取设备.

基本上,我有一个只传输数据的HID设备.我想打开它(理想上是独占的)访问,然后获取数据流.

我在IOKit文档中找到的所有示例都非常复杂,与libusb中的~8行相比.必须有一种更简单的方法,而不是第三方的图书馆.

值得注意的是,我完全不熟悉OS X的任何功能编程.

Python支持将是一个很好的加分

device-driver hid osx-snow-leopard

10
推荐指数
2
解决办法
7070
查看次数

在Windows8-Arm上禁用IE11中的所有页面缩放

如何在WinRT上通过IE11访问的网页禁用所有视口缩放?

我正在开发一个应用程序,它在一个适合视口的画布上绘制它自己的绘图,并在内部提供它自己的缩放功能.浏览器缩放然后弄乱了画布.

我一直在查看现有答案,但这些答案似乎都不适合这个平台:

<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=0"/>

<meta name="viewport" content="width=device-width; initial-scale=1.0; maximum-scale=1.0; user-scalable=0;">

<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1" />

<meta name="viewport" content="user-scalable=no" />

<meta name="viewport" content="width=device-width" />

<header>所有都没有效果.

另外,我想阻止双击缩放,但我见过的各种jQuery片段似乎也没有在这里工作.

html css internet-explorer tablet

8
推荐指数
1
解决办法
7543
查看次数

使C源中的大常量更具可读性?

我正在为微处理器编写一些代码.
它有一些大的关键常数.

#define F_CPU 16000000UL

在这种情况下,这是CPU频率.在赫兹.

实际上,如果没有手动在数字上标记光标,则很难判断它是1,600,000,160,000,000还是16,000,000.

如果我在数字中加入逗号#define F_CPU 16,000,000UL,它会截断常量.

我使用了一些具有特定数字分隔符的深奥语言,旨在使大数字更具可读性(例如16_000_000,主要是用于MCU的语言).大型"神奇数字"在嵌入式内容中相当普遍,因为它们需要描述MCU如何与现实世界对话.

C中有这样的东西吗?

c embedded readability microprocessors

7
推荐指数
3
解决办法
1472
查看次数

libusb:错误 [submit_bulk_transfer] 提交失败错误 -1 errno=2 - 我对 LibUSB 做错了什么?

好吧,我可能在做一些愚蠢的事情,但我无法让 libusb 让我终生将数据传输到我的设备。

代码:

#include <iostream>
#include <iomanip>

#include <unistd.h>
#include <stdlib.h>
#include <stdio.h>
#include <errno.h>
#include <signal.h>

#include <libusb-1.0/libusb.h>


#define EP_DATA_IN  0x83
#define EP_DATA_OUT 0x02
#define DEVICE_CONFIGURATION 0


int main(int argc, char **argv)
{

    int rc;
    libusb_context *ctx = NULL;
    libusb_device_handle *dev_handle;

    int actual = 0;
    unsigned char *data = new unsigned char[4];
    data[0]='a';data[1]='b';data[2]='c';data[3]='d';

    rc = libusb_init(&ctx);
    if(rc < 0) {
        std::cout << "Init Error " << rc << std::endl;
        return 1;
    }

    libusb_set_debug(ctx, 6);


    dev_handle = libusb_open_device_with_vid_pid(ctx, 0x03eb, …
Run Code Online (Sandbox Code Playgroud)

c c++ libusb

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

正确地将`void*`转换为C++中的整数

我正在处理一些使用外部库的代码,您可以在其中通过值将值传递给回调void*.

不幸的是,前一个处理此代码的人决定通过将整数转换为void指针((void*)val)来将整数传递给这些回调.

我现在正在努力清理这个烂摊子,我正在尝试确定将一个整数转换为/来自a的"正确"方法void*.不幸的是,修复void指针的使用有点超出了我能够在这里做的返工的范围.

现在,我正在进行两次转换以从/转换为void指针:

static_cast<int>(reinterpret_cast<intptr_t>(void_p))
Run Code Online (Sandbox Code Playgroud)

reinterpret_cast<void *>(static_cast<intptr_t>(dat_val))
Run Code Online (Sandbox Code Playgroud)

由于我在64位机器上,直接((int)void_p)转换会导致错误:

error: cast from 'void*' to 'int' loses precision [-fpermissive]
Run Code Online (Sandbox Code Playgroud)

最初的实现确实有效-fpermissive,但我试图摆脱可维护性和与bug相关的问题,所以我试图"正确"地做到这一点,例如c ++强制转换.

直接转换为int(static_cast<int>(void_p))失败(error: invalid static_cast from type 'void*' to type 'int').我的理解reinterpret_cast是,它基本上只是使编译器将有问题的值的地址视为转换数据类型而不实际发出任何机器代码,因此int直接转换为a void*将是一个坏主意,因为void*它更大然后int(分别为4/8字节).

认为intptr_t在这里使用是正确的中间体,因为它保证足够大以包含其整数值void*,并且一旦我有一个整数值,我就可以截断它而不会导致编译器抱怨.

这是正确的,甚至是理智的方法,因为我不得不通过无效指针推送数据?

c++ pointers casting

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

GNU LD可以按内存空间打印内存使用量,而不仅仅是批量百分比吗?

我正在ARM mcu上创建一个嵌入式项目,它有一个带有几个不同内存空间的自定义链接器文件:

/* Memory Spaces Definitions */
MEMORY
{
  rom      (rx)  : ORIGIN = 0x00400000, LENGTH = 0x00200000
  data_tcm (rw)  : ORIGIN = 0x20000000, LENGTH = 0x00008000
  prog_tcm (rwx) : ORIGIN = 0x00000000, LENGTH = 0x00008000
  ram      (rwx) : ORIGIN = 0x20400000, LENGTH = 0x00050000
  sdram    (rw)  : ORIGIN = 0x70000000, LENGTH = 0x00200000
}
Run Code Online (Sandbox Code Playgroud)

具体来说,我有许多不同的存储器设备具有不同的特性(TCM,普通RAM(在路上有D-Cache)和外部SDRAM),所有这些都被映射为同一地址空间的一部分.

我特意在不同的内存空间中放置不同的变量,具体取决于要求(我是否进入DMA,我是否有缓存一致性问题,我是否希望溢出D-cache等等).

如果我超过任何一个部分,我会收到链接器错误.但是,除非我这样做,否则链接器仅将内存使用量打印为批量百分比:

            Program Memory Usage    :   33608 bytes   1.6 % Full
            Data Memory Usage       :   2267792 bytes   91.1 % Full
Run Code Online (Sandbox Code Playgroud)

鉴于我有3个积极使用的内存空间,而且我知道我使用其中一个(SDRAM)的100%,这是一种无用的输出.

有没有办法让链接器单独输出每个内存空间的使用百分比?现在,我必须手动打开 …

c memory linker ld

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

如何将现有的仅头文件源文件添加到android studio?

这一定是我一段时间不得不问的最愚蠢的问题:

如何将现有的C/C++源头添加到android studio中的项目列表中?

我有一个我正在研究的android项目,我想在项目中添加一些只有头的库.但是,我不能为我的生活弄清楚如何让他们进入Android工作室更容易浏览.

我可以通过将C/C++文件添加到相应的CMake文件来添加它们,但我不知道Android Studio如何决定应用程序源代码树中应该包含哪些头文件,并且它找不到我实际使用的所有头文件.

坦率地说,我不确定android studio如何找到它确实显示的C头文件,因为它们没有列在你应该编辑的任何项目文件中.

做一个大容量文本搜索整个项目目录来被发现的头一个发现中文件的提.idea/workspace.xml档,但我尝试添加额外的文件头那里,只要我打开Android工作室,它删除添加的文件名,无论如何它都不会显示在UI中.

你应该怎么做呢?

c c++ android android-studio

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

Python:是否可以在“with”语句中内联解压序列类型

有没有办法在 python 中的 with 语句中进行内联解包?

现在,我有一个自定义上下文管理器,它返回一个sqlalchemy row对象,以及session可能将其作为二元组删除所需的关联对象,并在上下文退出时处理必要的数据库操作:

with self.row_sess_context(dbid=relid) as tup:
    row, sess = tup

    ...[manipulation code]...
Run Code Online (Sandbox Code Playgroud)

现在,在我看来,能够做类似的事情会特别“Pythonic”:

    with self.row_sess_context(dbid=relid) as row, sess:

    ...[manipulation code]...
Run Code Online (Sandbox Code Playgroud)

特别是因为 python 已经支持大多数其他上下文中的序列解包(for、列表理解、正常赋值等...)。

尝试诸如尝试 put row, sessis invalid之类的事情 会混淆 sublime text 语法荧光笔,而且我显然不够聪明,无法理解这是否从正式语法定义中完全不可能。

有没有比手动解压元组更好的方法?

python python-3.x

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